#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
为什么会出现这样的结果,\n符号在二进制文件中不是不会进行隐式转化嘛,为啥会多一个换行
Windows下换行符是\r\n连个字符,Linux下位\r
fgets会在输入流末尾自动加上’\0’
1.为什么有两个换行符?
Windows系统下换行符是两个字符’\r’和’\n’,所以会换行两次
2.空格哪来的??
fgets会再读取结束后在输入流的末尾自动加上’\0’作为结束的标志,而打印’\0’字符就是一个空格。
fgets函数原型为:char * fgets(char *restrict _Buf, int _MaxCount, FILE *restrict _File);但是fgets最多能接收的字符数量为(MaxCount - 1),这一点也要注意
fgets会吸收缓冲区中的回车符!!!并且这个回车符也会被解析为\r\n两个字符!!,
当用'r'方式读文件时,将文件里的\r\n读入为\n。
使用‘rb’,'wb'方式读写则不会发生上述转换