getc()不返回carrige返回'\ r'字符

Tal*_*yed 1 c stdio

我有一个带有一些示例文本的文本文件"hello.txt".当我在十六进制编辑器中打开文件时,我可以看到换行符的\ r \n字符.但是当我在带有getc()的C程序中读取文件时,\ r \n会以某种方式消失,我只会看到\n字符.

我试图在线搜索和stackoverflow但没有运气.

hello.txt的

Sample
File
Run Code Online (Sandbox Code Playgroud)

码:

#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;
}
Run Code Online (Sandbox Code Playgroud)

输出:

53 61 6D 70 6C 65 0A 46 69 6C 65
Run Code Online (Sandbox Code Playgroud)

从十六进制编辑器看到的文件:

53 61 6D 70 6C 65 0D 0A 46 69 6C 65
Run Code Online (Sandbox Code Playgroud)

可以看出,使用getc()函数时,0D0A仅输出0A.

为什么getc()会避免'\ r'字符?如何让它返回给定文件中的EXACT数据,即没有任何转换\ r \n到\n?

Jon*_*oni 5

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

fp = fopen("hello.txt", "rb");
Run Code Online (Sandbox Code Playgroud)

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