首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >getc()不返回carrige return '\r‘字符

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

Stack Overflow用户
提问于 2013-03-20 23:45:49
回答 3查看 188关注 0票数 1

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

我试着在网上和stackoverflow上搜索,但没有成功。

hello.txt

代码语言:javascript
复制
Sample
File

代码:

代码语言:javascript
复制
#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;
}

输出:

代码语言:javascript
复制
53 61 6D 70 6C 65 0A 46 69 6C 65

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

代码语言:javascript
复制
53 61 6D 70 6C 65 0D 0A 46 69 6C 65

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

为什么getc()要避免'\r‘字符?我如何才能让它返回给定文件中的确切数据,也就是说,没有任何\r\n到\n的转换?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-03-20 23:47:37

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

代码语言:javascript
复制
fp = fopen("hello.txt", "rb");

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

票数 5
EN

Stack Overflow用户

发布于 2013-03-20 23:47:29

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

票数 2
EN

Stack Overflow用户

发布于 2013-03-20 23:47:50

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15528277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档