繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM