fetch()不返回回车'\ r'字符

时间:2013-03-20 15:45:49

标签: c stdio

我有一个带有一些示例文本的文本文件“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?

3 个答案:

答案 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} }。