Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1702248
  • 博文数量: 98
  • 博客积分: 667
  • 博客等级: 上士
  • 技术积分: 1631
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-27 15:59
个人简介

一沙一世界 一树一菩提

文章分类

全部博文(98)

文章存档

2021年(8)

2020年(16)

2019年(8)

2017年(1)

2016年(11)

2015年(17)

2014年(9)

2013年(4)

2012年(19)

2011年(1)

2009年(4)

分类: LINUX

2013-01-09 09:25:45

这几天,做点在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);
}
感觉修改的不好,谁有更好的方法,一起交流啊。
阅读(3351) | 评论(0) | 转发(0) |
0

上一篇:linux 通知链

下一篇:ubuntu下apt使用

给主人留下些什么吧!~~