当前位置: 技术问答>linux和unix
简单的c函数读文件,windows和linux竟然结果不一样!
来源: 互联网 发布时间:2016-03-11
本文导语: 程序目的:希望读出[IDCODE]标签下的内容到变量idcode, 以下程序在vc里执行很好,但在linux却始终不执行 if(buffer == "[IDCODE]n") 奇怪啊!请高人指点,谢谢帮忙! int main(void) { char buffer[256]; FILE *fp; memset(buffer,'...
程序目的:希望读出[IDCODE]标签下的内容到变量idcode,
以下程序在vc里执行很好,但在linux却始终不执行
if(buffer == "[IDCODE]n")
奇怪啊!请高人指点,谢谢帮忙!
int main(void)
{
char buffer[256];
FILE *fp;
memset(buffer,'',256);
int row;
fp = fopen(".//IDCODE.CFG","r");//对于读出的字符串需要比较的情况,不能用2进制读入
if( fp == NULL )
{
printf("IDCODE.CFG file can not be opened!");
return -1;
}
printf("start read confign");
while(fgets(buffer, 256, fp))
{
printf("00000n");
printf("buffer = %s", buffer);
if (buffer[0] == ';' )
{
printf(";;;;n");
continue;
}
if (buffer[0] == 'n')
{
printf("11111n");
continue;
}
if(buffer == "[IDCODE]n")
{
row = 0;
printf("33333n");
while(fgets(buffer, 256, fp))
{
printf("buffer = %s n", buffer);
idcode = buffer;
printf("idcode = %s n", idcode);
row++;
printf("22222n");
if (row >=1) break;
}
continue;
}
if(buffer == "[IDCODE]")
{
row = 0;
printf("33333n");
while(fgets(buffer, 256, fp))
{
printf("buffer = %s n", buffer);
idcode = buffer;
printf("idcode = %s n", idcode);
row++;
printf("22222n");
if (row >=1) break;
}
continue;
}
if(strcmp(buffer, "[END]")==0 )
{
printf("read config end 1n");
break;
}
if(strcmp(buffer, "[END]n")==0)
{
printf("read config end 2n");
break;
}
}
fclose(fp);
return 0;
}
//------------------------------------
IDCODE.CFG文件内容为:
;采集装置配置文件
[IDCODE]
00SXDTDC
[END]
以下程序在vc里执行很好,但在linux却始终不执行
if(buffer == "[IDCODE]n")
奇怪啊!请高人指点,谢谢帮忙!
int main(void)
{
char buffer[256];
FILE *fp;
memset(buffer,'',256);
int row;
fp = fopen(".//IDCODE.CFG","r");//对于读出的字符串需要比较的情况,不能用2进制读入
if( fp == NULL )
{
printf("IDCODE.CFG file can not be opened!");
return -1;
}
printf("start read confign");
while(fgets(buffer, 256, fp))
{
printf("00000n");
printf("buffer = %s", buffer);
if (buffer[0] == ';' )
{
printf(";;;;n");
continue;
}
if (buffer[0] == 'n')
{
printf("11111n");
continue;
}
if(buffer == "[IDCODE]n")
{
row = 0;
printf("33333n");
while(fgets(buffer, 256, fp))
{
printf("buffer = %s n", buffer);
idcode = buffer;
printf("idcode = %s n", idcode);
row++;
printf("22222n");
if (row >=1) break;
}
continue;
}
if(buffer == "[IDCODE]")
{
row = 0;
printf("33333n");
while(fgets(buffer, 256, fp))
{
printf("buffer = %s n", buffer);
idcode = buffer;
printf("idcode = %s n", idcode);
row++;
printf("22222n");
if (row >=1) break;
}
continue;
}
if(strcmp(buffer, "[END]")==0 )
{
printf("read config end 1n");
break;
}
if(strcmp(buffer, "[END]n")==0)
{
printf("read config end 2n");
break;
}
}
fclose(fp);
return 0;
}
//------------------------------------
IDCODE.CFG文件内容为:
;采集装置配置文件
[IDCODE]
00SXDTDC
[END]
|
if(buffer == "[IDCODE]n")
这一句简直就是乱写!
buffer是个地址,地址怎么和字符串比较!
应该用strcmp 或者 strncmp
这一句简直就是乱写!
buffer是个地址,地址怎么和字符串比较!
应该用strcmp 或者 strncmp
|
楼主,我知道当有人说你的程序有问题时你可能不高兴,但是if(buffer == "[IDCODE]n") 这一句话真的的不懂C语言编程人的写法!也许你用Java习惯了这种写法,但是在C语言中这是极度错误的!至于它在VC中能不能通过,我根本不予考虑,也不值得测试!就算测试通过,这也是一种及其不稳定的做法,随机性太强了,如履薄冰啊!
|
在VC的库中,应该实是重载了operator = (char *,char *),或者隐式转换成了CString,这样字符串就可以比较,但在GCC下面就没有,所以会出现两者不同的情况.楼主在VC下可以在if(buffer == "[IDCODE]n") 处设一个断点,执行这个地方的时候,按一下Alt+8,返汇编,看看生成的汇编调用的是什么比较函数.看了之后,你就会明白,VC是做了什么动作了.
|
vc是一种对c的扩展,而linux下的c一般是最标准的,因此一段C代码要从VC移植到linux下也是有一定工作量的。
|
同意,这一行code实在是初级初级的错误。
|
JAVA里面貌似也是用 compareto() & equal()吧