我有一个带有一些示例文本的文本文件"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?
在Windows上,您必须以二进制模式打开文件:
fp = fopen("hello.txt", "rb");
Run Code Online (Sandbox Code Playgroud)
默认的文本模式将DOS/Windows行结尾\r\n转换为单个字符.