windows 系统的文件换行符不是\r\n 吗,为什么下面的 c 程序的输出结果不太一样

查看 44|回复 3
作者:rookiemaster   
c 程序:
#include
int main()
{
    FILE *fd = fopen("tmpfile.txt", "r");
   
    char c;
    while ((c = getc(fd)) != EOF)
    {
        printf("%d, ", c);
    }
}
tmpfile.txt 内容:
1
2
程序输出结果:
49, 10, 50,
程序不应该是输出:
49, 13, 10, 50,
吗?
补充:在 win11 下执行
geelaw   
首先,Windows 不可能要求 txt 文件一定按某种格式存储,或许你的 txt 文件里面只有三个字节。所谓 Windows 的换行是 \r\n 是指通常的 Windows 软件会这样存储换行,但如 VSCode 等代码工具可以配置换行方式。
其次,这是 C 语言的抽象,任何平台的行分隔序列、行结尾序列,在文本模式下都会在通过 FILE 进入 C 语言时被变换为 \n ,并且 \n 会在通过 FILE 进入平台时换成平台特定的序列。要获得文件的字节内容,应该用二进制操作,即 rb 、wb 。
rookiemaster
OP
  
@geelaw 感谢,在 vscode 下改成 CRLF 确实输出了 49, 13, 10, 50, 奇怪的是在 win11 下打开 txt 文件,记事本右下角确实显示的是 Windows(CRLF)
ShinichiYao   
显示 CRLF 表示你敲回车会输入\r\n ,不代表不会把\n 显示为换行
您需要登录后才可以回帖 登录 | 立即注册

返回顶部