这几天,做点在linux环境下读取windows sql-2008数据库的工作。在这个过程当中,遇见点小问题,以前没有关注过,但是个人感觉很有必要记下来。
事情是这样的,工作当中要解析配置文件。
但是解析的结果大多数时候正确,但是也有不正确的时候。同一个文件啊。
开始初步怀疑代码流程有问题,加了日志打印,发现流程是没有问题的。
那就只有fgets的问题了。这里附上我的测试代码:
fp = fopen(DBINFOCONFNAME, "r不");
if(!fp)
return -1;
while(!feof(fp)){
memset(buf, 0, 100);
if(fgets(buf, 99, fp) == NULL){
fclose(fp);
return -1;
}
else{
len = strlen(buf);
buf[len-1] = '\0';
printf("buf = %s--%d\n", buf, len);
}
}
加入要打开的文件里的内容是:
123456
654321
那么输出是:
123456--6
654321--6
这样的输出貌似是对的。起码我这样认为,因为平时我的工作都在linux环境下工作,所以这样的结果却是正确。
但是如果这个配置文件是在windows下编译的。那么执行结果就不一样了,输出如下:
123456--7
654321--7
分析原因如下:
linux环境下行尾以'\n'结束。
windows环境下行尾以‘\n\r’结束。
所以我的代码在linux下写的配置文件能顺利执行,但是windows下编译的配置文件就不正确了。
这是自己以前的代码,直接copy拿来就用了,一直以为是经过测试的可以很好的直接运行,看样子啊,不能太相信以前测试过的代码啊。自己太大意了。
我是这样简单的修改的:
else{
len = strlen(buf);
if((buf[len-2] == '\n') && (buf[len-1] == '\r'))
buf[len-2] = '\0';
else
buf[len-1] = '\0';
printf("buf = %s--%d\n", buf, len);
}
感觉修改的不好,谁有更好的方法,一起交流啊。
阅读(3420) | 评论(0) | 转发(0) |