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

use*_*152 2 c string newline

所以我有以下代码:

printf("the output is: %s.\n", intCAPass);
Run Code Online (Sandbox Code Playgroud)

其中打印以下内容:

the output is: intercapass
.
Run Code Online (Sandbox Code Playgroud)

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

intCAPass[strlen(intCAPass)- 1] = '\0';
strtok(intCAPass,"\n");
Run Code Online (Sandbox Code Playgroud)

但两者都给我以下输出:

.he output is: intercapass
Run Code Online (Sandbox Code Playgroud)

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

更多信息:

操作系统:Linux

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

ilk*_*chu 5

.he output is: intercapass
Run Code Online (Sandbox Code Playgroud)

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

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

printf("string one: %s.\n", "blah\r\n");
printf("string two: %s.\n", "blah\r");
Run Code Online (Sandbox Code Playgroud)

检查\n字符串末尾前面的字符对a \r,并删除它.