有人能帮我解开这个谜团吗?
我读到了'/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.txttest.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);
}
}请暂时忽略潜在的bug,因为这不是问题所在(我希望如此)。这段代码将只打印文件中的每个字符,并且它是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: 10test.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‘字符,而在config.txt中,每一行末尾都有'/r’和‘/n?
第二,为什么“字符”在打印的行处消失,其ascii值为13"?“
谢谢。
发布于 2014-04-02 12:29:40
当打印到控制台窗口(即不是文件)时,\r指示它返回行的开头(因此“字符是”文本消失)。然而,\n指示它转到下一行。例如,\r对于显示同一行的进度非常有用。
文件可以在每一行末尾用\r\n、\n或\r保存(请参阅下面的注释),而现在文本编辑器也会对文件进行相同的解释(实际上,如果将文件中的类型混合在一起,许多人会警告您)。看起来您有一个带有\r\n的文件,另一个文件只有\n。
发布于 2014-04-02 12:33:11
行尾差异可能是由各种原因造成的,例如使用不同的文本编辑器。
对于\n和\r字符,它们执行以下操作:
\n将插入符号移动到下一行\r将插入符号移动到当前行的开头。有了这些知识,你应该能够理解程序的输出。这是“正常”的性格:
Character is: t, its ascii value: 116这是\r,注意打印时插入符号是如何移动到行的开头的:
, its ascii value: 13这是\n,注意打印时插入符号是如何移动到下一行的:
Character is:
, its ascii value: 10发布于 2014-04-02 12:33:57
第一个问题是我们无法解决的,因为我们不知道文件是如何创建的。Windows程序通常使用‘\r’,而对于Linux '\n‘则足够了。
第二个问题很容易回答,你可以打印“字符是:\n,它的.”所以你可以换一条新线路。除非您转义特殊字符,否则无法打印换行符。
编辑您可能想要转义更多的\r &n,像制表符和其他。请参阅这里
https://stackoverflow.com/questions/22811319
复制相似问题