繁体   English   中英

文件中的回车符

[英]Carriage return character in files

有人可以为我解决这个谜题吗?
我读到了关于'/ r'和'/ n'之间的区别,这不是我要问的...

考虑以下两个文件:
config.txt:

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:

This is a test file
Why isn't there carriage return char
at the end of each line in this file?

现在,考虑以下代码:

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);
    }
}

请暂时忽略潜在的错误,因为这不是这里的问题(我希望)。 这段代码只会打印文件中的每个字符,它是ascii值。

现在,观察当我在上述文件上运行它时会发生什么...
config.txt的输出

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的输出

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'char ,而在config.txt中 ,末尾同时有'/ r' '/ n'每行??
其次,为什么“ Character is”一词在其印刷“ ascii值为13”的行中消失了?

谢谢。

当打印到控制台窗口(即不是文件)时, \\r指示它返回到行的开头(因此,“ Character is”文本消失了)。 \\n指示它前进到下一行。 例如, \\r可用于在同一行上显示进度。

可以在每行末尾用\\r\\n\\n\\r保存文件(请参见下面的注释),并且文本编辑器对这些天的解释相同(实际上,如果您混合使用,则会警告您)文件中的类型)。 看来您有一个带有\\r\\n文件,而另一个只有\\n in。

行尾差异可能是由多种原因引起的,例如,使用了不同的文本编辑器。

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

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

有了这些知识,您就应该能够理解程序的输出。 这是“正常”字符:

Character is: t, its ascii value: 116

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

, its ascii value: 13

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

Character is: 
, its ascii value: 10

“ Character is”消失的原因是\\ 13字符是回车符。 它将光标放回到该行的开头,以便文本“”,其ascii值为...”的其余部分覆盖它。

仅\\ n(换行)或\\ r \\ n(回车和换行)是有效的。

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

第二个问题很容易回答,您打印“ Character is:\\ n,它的...”,这样您就可以换行了。 您必须先换行才能换行,除非您转义了特殊字符。

编辑您可能想要转义\\ r&\\ n以外的内容,例如制表符和其他。 这里

我无法回答这两个文件之间的差异,因为我没有它们,也没有创建它们的方法。

就是说,ASCII值13和ASCII值10是不可打印的字符。 意思是,除非您从看似用来控制回车和/或换行符到\\r\\n看似不可见字符中检测并转换该值,否则您将不会“看到”它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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