程序之美
问题来源
有很多小伙伴在进行文件读写时,一定发现一个奇怪的现象,以rb打开多行字符文件,输出时,多了换行,但是如果以r方式打开时,就能够正常输出,感到十分困惑。如下代码实例:
#include <stdio.h>
#include <stdlib.h>
#define N 100
int main(){
FILE *fp;
char str[N+1];
if( (fp=fopen("F:\\clion c++\\code\\cmake-build-debug-coverage\\t1.txt","rb")) == NULL ){
puts("Fail to open file!");
exit(0);
}
while(fgets(str, N, fp) != NULL){
printf("%s", str);
}
fclose(fp);
return 0;
}
输出结果
//文件中字符为
feqaer
asdfasdf
adsfa
//以rb文件,读取输出
feqaer
asdfasdf
adsfa
//以r打开文件
feqaer
asdfasdf
adsfa
答疑
为什么会出现这样的现象呢,我们还是从文件读取方式入手,经过多方验证查找,发现如下结论:
windows:
当用’w’方式写文件时,将\n变成两个字符\r\n写入文件。
当用’r’方式读文件时,将文件里的\r\n读入为\n。
使用‘rb’,'wb’方式读写则不会发生上述转换
Linux:
没有区别,因为linux只使用\n表示换行。