[英]getc() does not return carrige return '\r' character
我有一个带有一些示例文本的文本文件“ hello.txt”。 在十六进制编辑器中打开文件时,可以看到换行符的\\ r \\ n个字符。 但是,当我使用getc()在C程序中读取文件时,\\ 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的任何转换?
在Windows上,您必须以二进制模式打开文件:
fp = fopen("hello.txt", "rb");
默认的文本模式将\\r\\n
结尾的DOS / Windows行转换为单个字符。
如果您以文本模式打开文件,则fp = fopen("hello.txt", "r");
,如果替换0x0A
字符,则将忽略0x0D
字符。
尝试fp = fopen("hello.txt", "rb");
-在'b'
处于打开模式的情况下,以“测试模式”打开文件,这会将行尾(取决于平台)转换/归一化为\\n
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.