ASCII 13(\r)为何在Windows下表现为换行?代码输出异常问询
问题解析:Windows下单独
\r字符的显示行为 你写入文件的字节序列是\r\rA(两个ASCII 13,一个ASCII 65),之所以看到A在第三行,核心原因是Windows文本编辑器对单独回车符(\r)的解析逻辑:
- Windows系统的标准换行是
\r\n(回车+换行),其中\r负责将光标移到当前行开头,\n负责将光标下移一行。 - 但多数现代Windows文本编辑器(包括新版记事本)会把单独的
\r字符当作完整的换行处理(等同于\r\n),每遇到一个\r就会触发一次换行操作。
对应你的测试场景:
当数组是
{13,13,65}时:- 第一个
\r被解析为换行,生成第一行空行; - 第二个
\r再次被解析为换行,生成第二行空行; - 最后写入的
A就显示在第三行。
- 第一个
当数组是
{65,13,13,65}时:- 第一个
A直接显示在第一行; - 第一个
\r被解析为换行,生成第二行空行; - 第二个
\r被解析为换行,随后的A显示在第三行。
- 第一个
另外要注意,你的代码用了"wb"二进制模式打开文件,C标准库不会对写入的字节做任何换行转换,文件里的内容就是你写入的原始\r和A字节,没有额外添加字符。
内容的提问来源于stack exchange,提问作者Panda
相关产品推荐
相关产品推荐

