Chinaunix首页 | 论坛 | 博客

分类: C/C++

2015-01-20 21:16:26

如果要编写跨平台的(windows和Linux)文本处理程序,需要考虑两个问题:路径和换行符。
在相对路径的表示方法上至少它们都支持"./**./"的形式(至少我测试的是这样子的)
大家都清楚,\r\n是WINDOWS的换行符,\n是Linux的换行符。那么LINUX下的换行符WINDOWS是否也支持呢?
写了个小程序,测试了一把。貌似还真是这样,我的例子是
test1\n
\n
test2\n
测试过程:调用fgets读取每行数据,然后进行字符串比较。
在Linux和Windows下都读取了三次,读取到的内容都一致。
结果就想当然的认为WINDOWS支持\n作为换行符。

从这里开始,也是这一天灾难的开始。
问题1: fgets怎么会读取上一行的结尾;
问题2:fgets 返回值为0, 但是 fpos_t的值怎么是0xfffffffc呀。
各种奇葩的问题,导致自己甚至怀疑stdio.h在windows下还要初始化使用。
最后还是借助谷歌和stackoverflow找到了答案。

答案就是:WINDOWS不支持\n作为它的换行符
最后借助dos2unix 和 unix2dos 转换测试用例,完成了在windows下的测试工作。

至于上面那个case为什么能通过,也懒得追究了。

阅读(2212) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~