首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >文件中的回车字符

文件中的回车字符
EN

Stack Overflow用户
提问于 2014-04-02 12:21:21
回答 5查看 3.4K关注 0票数 1

有人能帮我解开这个谜团吗?

我读到了'/r‘和'/n’之间的区别,这不是我想要问的.

考虑这两个文件:

config.txt:

代码语言:javascript
复制
home/my_user/Documents/prog/my_folder
home/my_user/Documents/prog/IO/input_for_prog.txt
home/my_user/Documents/prog/IO/correct_output.txt

test.txt:

代码语言:javascript
复制
This is a test file
Why isn't there carriage return char
at the end of each line in this file?

现在,考虑以下代码:

代码语言:javascript
复制
int main(int argc, char* argv[]) {

    int fd=open(argv[1], O_RDONLY);
    if (fd==-1) {
        perror("Error opening");
        return -1;
    }

    char ch;
    int ret_code;

    while ((ret_code=read(fd, &ch, 1))!=0) {

        if (ret_code==-1) {
            perror("Error reading");
            return -1;
        }

        printf("Character is: %c, its ascii value: %d\n", ch, ch);
    }
}

请暂时忽略潜在的bug,因为这不是问题所在(我希望如此)。这段代码将只打印文件中的每个字符,并且它是ascii值。

现在,看看当我在上面的文件上运行时会发生什么.

config.txt:的输出

代码语言:javascript
复制
Character is: h, its ascii value: 104
Character is: o, its ascii value: 111
Character is: m, its ascii value: 109
Character is: e, its ascii value: 101
Character is: /, its ascii value: 47
Character is: m, its ascii value: 109
Character is: y, its ascii value: 121
Character is: _, its ascii value: 95
Character is: u, its ascii value: 117
Character is: s, its ascii value: 115
Character is: e, its ascii value: 101
Character is: r, its ascii value: 114
Character is: /, its ascii value: 47
Character is: D, its ascii value: 68
Character is: o, its ascii value: 111
Character is: c, its ascii value: 99
Character is: u, its ascii value: 117
Character is: m, its ascii value: 109
Character is: e, its ascii value: 101
Character is: n, its ascii value: 110
Character is: t, its ascii value: 116
Character is: s, its ascii value: 115
Character is: /, its ascii value: 47
Character is: p, its ascii value: 112
Character is: r, its ascii value: 114
Character is: o, its ascii value: 111
Character is: g, its ascii value: 103
Character is: /, its ascii value: 47
Character is: m, its ascii value: 109
Character is: y, its ascii value: 121
Character is: _, its ascii value: 95
Character is: f, its ascii value: 102
Character is: o, its ascii value: 111
Character is: l, its ascii value: 108
Character is: d, its ascii value: 100
Character is: e, its ascii value: 101
Character is: r, its ascii value: 114
, its ascii value: 13
Character is: 
, its ascii value: 10
Character is: h, its ascii value: 104
Character is: o, its ascii value: 111
Character is: m, its ascii value: 109
Character is: e, its ascii value: 101
Character is: /, its ascii value: 47
Character is: m, its ascii value: 109
Character is: y, its ascii value: 121
Character is: _, its ascii value: 95
Character is: u, its ascii value: 117
Character is: s, its ascii value: 115
Character is: e, its ascii value: 101
Character is: r, its ascii value: 114
Character is: /, its ascii value: 47
Character is: D, its ascii value: 68
Character is: o, its ascii value: 111
Character is: c, its ascii value: 99
Character is: u, its ascii value: 117
Character is: m, its ascii value: 109
Character is: e, its ascii value: 101
Character is: n, its ascii value: 110
Character is: t, its ascii value: 116
Character is: s, its ascii value: 115
Character is: /, its ascii value: 47
Character is: p, its ascii value: 112
Character is: r, its ascii value: 114
Character is: o, its ascii value: 111
Character is: g, its ascii value: 103
Character is: /, its ascii value: 47
Character is: I, its ascii value: 73
Character is: O, its ascii value: 79
Character is: /, its ascii value: 47
Character is: i, its ascii value: 105
Character is: n, its ascii value: 110
Character is: p, its ascii value: 112
Character is: u, its ascii value: 117
Character is: t, its ascii value: 116
Character is: _, its ascii value: 95
Character is: f, its ascii value: 102
Character is: o, its ascii value: 111
Character is: r, its ascii value: 114
Character is: _, its ascii value: 95
Character is: p, its ascii value: 112
Character is: r, its ascii value: 114
Character is: o, its ascii value: 111
Character is: g, its ascii value: 103
Character is: ., its ascii value: 46
Character is: t, its ascii value: 116
Character is: x, its ascii value: 120
Character is: t, its ascii value: 116
, its ascii value: 13
Character is: 
, its ascii value: 10
Character is: h, its ascii value: 104
Character is: o, its ascii value: 111
Character is: m, its ascii value: 109
Character is: e, its ascii value: 101
Character is: /, its ascii value: 47
Character is: m, its ascii value: 109
Character is: y, its ascii value: 121
Character is: _, its ascii value: 95
Character is: u, its ascii value: 117
Character is: s, its ascii value: 115
Character is: e, its ascii value: 101
Character is: r, its ascii value: 114
Character is: /, its ascii value: 47
Character is: D, its ascii value: 68
Character is: o, its ascii value: 111
Character is: c, its ascii value: 99
Character is: u, its ascii value: 117
Character is: m, its ascii value: 109
Character is: e, its ascii value: 101
Character is: n, its ascii value: 110
Character is: t, its ascii value: 116
Character is: s, its ascii value: 115
Character is: /, its ascii value: 47
Character is: p, its ascii value: 112
Character is: r, its ascii value: 114
Character is: o, its ascii value: 111
Character is: g, its ascii value: 103
Character is: /, its ascii value: 47
Character is: I, its ascii value: 73
Character is: O, its ascii value: 79
Character is: /, its ascii value: 47
Character is: c, its ascii value: 99
Character is: o, its ascii value: 111
Character is: r, its ascii value: 114
Character is: r, its ascii value: 114
Character is: e, its ascii value: 101
Character is: c, its ascii value: 99
Character is: t, its ascii value: 116
Character is: _, its ascii value: 95
Character is: o, its ascii value: 111
Character is: u, its ascii value: 117
Character is: t, its ascii value: 116
Character is: p, its ascii value: 112
Character is: u, its ascii value: 117
Character is: t, its ascii value: 116
Character is: ., its ascii value: 46
Character is: t, its ascii value: 116
Character is: x, its ascii value: 120
Character is: t, its ascii value: 116
, its ascii value: 13
Character is: 
, its ascii value: 10

test.txt:的输出

代码语言:javascript
复制
Character is: T, its ascii value: 84
Character is: h, its ascii value: 104
Character is: i, its ascii value: 105
Character is: s, its ascii value: 115
Character is:  , its ascii value: 32
Character is: i, its ascii value: 105
Character is: s, its ascii value: 115
Character is:  , its ascii value: 32
Character is: a, its ascii value: 97
Character is:  , its ascii value: 32
Character is: t, its ascii value: 116
Character is: e, its ascii value: 101
Character is: s, its ascii value: 115
Character is: t, its ascii value: 116
Character is:  , its ascii value: 32
Character is: f, its ascii value: 102
Character is: i, its ascii value: 105
Character is: l, its ascii value: 108
Character is: e, its ascii value: 101
Character is: 
, its ascii value: 10
Character is: W, its ascii value: 87
Character is: h, its ascii value: 104
Character is: y, its ascii value: 121
Character is:  , its ascii value: 32
Character is: i, its ascii value: 105
Character is: s, its ascii value: 115
Character is: n, its ascii value: 110
Character is: ', its ascii value: 39
Character is: t, its ascii value: 116
Character is:  , its ascii value: 32
Character is: t, its ascii value: 116
Character is: h, its ascii value: 104
Character is: e, its ascii value: 101
Character is: r, its ascii value: 114
Character is: e, its ascii value: 101
Character is:  , its ascii value: 32
Character is: c, its ascii value: 99
Character is: a, its ascii value: 97
Character is: r, its ascii value: 114
Character is: r, its ascii value: 114
Character is: i, its ascii value: 105
Character is: a, its ascii value: 97
Character is: g, its ascii value: 103
Character is: e, its ascii value: 101
Character is:  , its ascii value: 32
Character is: r, its ascii value: 114
Character is: e, its ascii value: 101
Character is: t, its ascii value: 116
Character is: u, its ascii value: 117
Character is: r, its ascii value: 114
Character is: n, its ascii value: 110
Character is:  , its ascii value: 32
Character is: c, its ascii value: 99
Character is: h, its ascii value: 104
Character is: a, its ascii value: 97
Character is: r, its ascii value: 114
Character is: 
, its ascii value: 10
Character is: a, its ascii value: 97
Character is: t, its ascii value: 116
Character is:  , its ascii value: 32
Character is: t, its ascii value: 116
Character is: h, its ascii value: 104
Character is: e, its ascii value: 101
Character is:  , its ascii value: 32
Character is: e, its ascii value: 101
Character is: n, its ascii value: 110
Character is: d, its ascii value: 100
Character is:  , its ascii value: 32
Character is: o, its ascii value: 111
Character is: f, its ascii value: 102
Character is:  , its ascii value: 32
Character is: e, its ascii value: 101
Character is: a, its ascii value: 97
Character is: c, its ascii value: 99
Character is: h, its ascii value: 104
Character is:  , its ascii value: 32
Character is: l, its ascii value: 108
Character is: i, its ascii value: 105
Character is: n, its ascii value: 110
Character is: e, its ascii value: 101
Character is:  , its ascii value: 32
Character is: i, its ascii value: 105
Character is: n, its ascii value: 110
Character is:  , its ascii value: 32
Character is: t, its ascii value: 116
Character is: h, its ascii value: 104
Character is: i, its ascii value: 105
Character is: s, its ascii value: 115
Character is:  , its ascii value: 32
Character is: f, its ascii value: 102
Character is: i, its ascii value: 105
Character is: l, its ascii value: 108
Character is: e, its ascii value: 101
Character is: ?, its ascii value: 63
Character is: 
, its ascii value: 10

有几件事我注意到了,却找不到答案:

首先,正如test.txt文件所建议的,为什么这个文件的每一行末尾没有'/r‘字符,而在config.txt中,每一行末尾都有'/r’‘/n?

第二,为什么“字符”在打印的行处消失,其ascii值为13"?“

谢谢。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-04-02 12:29:40

当打印到控制台窗口(即不是文件)时,\r指示它返回行的开头(因此“字符是”文本消失)。然而,\n指示它转到下一行。例如,\r对于显示同一行的进度非常有用。

文件可以在每一行末尾用\r\n\n\r保存(请参阅下面的注释),而现在文本编辑器也会对文件进行相同的解释(实际上,如果将文件中的类型混合在一起,许多人会警告您)。看起来您有一个带有\r\n的文件,另一个文件只有\n

票数 6
EN

Stack Overflow用户

发布于 2014-04-02 12:33:11

行尾差异可能是由各种原因造成的,例如使用不同的文本编辑器。

对于\n\r字符,它们执行以下操作:

  • \n将插入符号移动到下一行
  • \r将插入符号移动到当前行的开头。

有了这些知识,你应该能够理解程序的输出。这是“正常”的性格:

代码语言:javascript
复制
Character is: t, its ascii value: 116

这是\r,注意打印时插入符号是如何移动到行的开头的:

代码语言:javascript
复制
, its ascii value: 13

这是\n,注意打印时插入符号是如何移动到下一行的:

代码语言:javascript
复制
Character is: 
, its ascii value: 10
票数 3
EN

Stack Overflow用户

发布于 2014-04-02 12:33:57

第一个问题是我们无法解决的,因为我们不知道文件是如何创建的。Windows程序通常使用‘\r’,而对于Linux '\n‘则足够了。

第二个问题很容易回答,你可以打印“字符是:\n,它的.”所以你可以换一条新线路。除非您转义特殊字符,否则无法打印换行符。

编辑您可能想要转义更多的\r &n,像制表符和其他。请参阅这里

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

https://stackoverflow.com/questions/22811319

复制
相关文章

相似问题

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