c 程序:
#include <stdio.h>
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 下执行
1
geelaw 285 天前
首先,Windows 不可能要求 txt 文件一定按某种格式存储,或许你的 txt 文件里面只有三个字节。所谓 Windows 的换行是 \r\n 是指通常的 Windows 软件会这样存储换行,但如 VSCode 等代码工具可以配置换行方式。
其次,这是 C 语言的抽象,任何平台的行分隔序列、行结尾序列,在文本模式下都会在通过 FILE 进入 C 语言时被变换为 \n ,并且 \n 会在通过 FILE 进入平台时换成平台特定的序列。要获得文件的字节内容,应该用二进制操作,即 rb 、wb 。 |
2
rookiemaster OP @geelaw 感谢,在 vscode 下改成 CRLF 确实输出了 49, 13, 10, 50, 奇怪的是在 win11 下打开 txt 文件,记事本右下角确实显示的是 Windows(CRLF)
|
3
ShinichiYao 285 天前 via Android
显示 CRLF 表示你敲回车会输入\r\n ,不代表不会把\n 显示为换行
|