C删除字符串末尾的换行符很奇怪

时间:2017-05-10 20:52:19

标签: c string newline

所以我有以下代码:

printf("the output is: %s.\n", intCAPass);

打印以下内容:

the output is: intercapass
.

所以我尝试了以下两个选项来删除字符串intCAPass末尾的换行符:

intCAPass[strlen(intCAPass)- 1] = '\0';
strtok(intCAPass,"\n");

但两者都给我以下输出:

.he output is: intercapass

所以我想知道这里发生了什么。

更多信息:

操作系统:Linux

变量intCAPass从读取包含interca\n的文件的函数接收字符串。所以,我使用一个缓冲区来复制整个文件,最后我做buffer[len] = '\0';,在某些时候我认为它可能会导致一些问题,但我不这么认为。

1 个答案:

答案 0 :(得分:5)

.he output is: intercapass

您在输入字符串中有一个Windows样式的CRLF(\r\n)行。 删除最终换行符\n后,回车符\r将保留在字符串中。打印时,它会将输出移回到行的开头。因此,最后一个点会覆盖输出行的第一个字母。

这些应该表现出类似的行为:

printf("string one: %s.\n", "blah\r\n");
printf("string two: %s.\n", "blah\r");

检查字符串末尾的\n前面的字符与\r,并删除该字符。