1

我有一个带有一些示例文本的文本文件“hello.txt”。当我在十六进制编辑器中打开文件时,我可以看到换行符的 \r\n 字符。但是当我用 getc() 在 C 程序中读取文件时, \r 不知何故消失了,我只看到 \n 字符。

我试图在网上和 stackoverflow 上搜索,但没有运气。

你好.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 的转换?

4

3 回答 3

5

在 Windows 上,您必须以二进制模式打开文件:

fp = fopen("hello.txt", "rb");

默认文本模式将 DOS/Windows 行结尾\r\n转换为单个字符。

于 2013-03-20T15:47:36.777 回答
2

如果您以文本模式打开文件fp = fopen("hello.txt", "r");0x0D则前面的0x0A字符将被忽略。

于 2013-03-20T15:47:28.930 回答
2

尝试fp = fopen("hello.txt", "rb");-'b'在打开模式下,文件以“测试模式”打开,这会将行尾(取决于平台)转换/规范化为简单的\n.

于 2013-03-20T15:47:50.207 回答