我有一个带有一些示例文本的文本文件“hello.txt”。当我在十六进制编辑器中打开文件时,我可以看到换行符的\ r \ n字符。但是当我使用getc()读取C程序中的文件时,\ r \ n会以某种方式消失,我只看到\ n字符。
我尝试在线搜索并在stackoverflow上搜索,但没有运气。
hello.txt的
Sample
File
代码:
#include <stdio.h>
int main()
{
FILE *fp;
fp = fopen("hello.txt", "r");
int character = 0;
while( (character = getc(fp)) != EOF)
{
printf("%.2X ", character);
}
return 0;
}
输出:
53 61 6D 70 6C 65 0A 46 69 6C 65
从十六进制编辑器中看到的文件:
53 61 6D 70 6C 65 0D 0A 46 69 6C 65
可以看出,使用getc()函数时,0D0A仅输出0A。
为什么getc()会避免'\ r'字符?如何让它返回给定文件中的EXACT数据,即没有任何转换为\ r \ n到\ n?
答案 0 :(得分:5)
在Windows上,您必须以二进制模式打开文件:
fp = fopen("hello.txt", "rb");
默认的文本模式,将结束\r\n
的DOS / Windows行转换为单个字符。
答案 1 :(得分:2)
如果您以文本模式fp = fopen("hello.txt", "r");
打开文件,则0x0D
字符(如果预先0x0A
字符将被忽略。
答案 2 :(得分:2)
尝试fp = fopen("hello.txt", "rb");
- 在开放模式下使用'b'
,文件以“测试模式”打开,该文件会将行结尾(取决于平台)转换/标准化为{{1} }。