我有一个文本文件"hello.txt“,其中包含一些示例文本。当我在十六进制编辑器中打开文件时,我可以看到\r\n换行符。但是当我在C程序中使用getc()读取文件时,\r不知何故消失了,我只看到了\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‘字符?我如何才能让它返回给定文件中的确切数据,也就是说,没有任何\r\n到\n的转换?
发布于 2013-03-20 23:47:37
在Windows上,您必须以二进制模式打开文件:
fp = fopen("hello.txt", "rb");默认情况下,文本模式将以\r\n结尾的DOS/Windows行转换为单个字符。
发布于 2013-03-20 23:47:29
如果以文本模式fp = fopen("hello.txt", "r");打开文件,则在0x0A字符之前的0x0D字符将被忽略。
发布于 2013-03-20 23:47:50
尝试fp = fopen("hello.txt", "rb"); -在'b'处于打开模式的情况下,文件将以“测试模式”打开,该模式会将行尾(取决于平台)转换/规范化为简单的\n。
https://stackoverflow.com/questions/15528277
复制相似问题