所以我有以下代码:
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';
,在某些时候我认为它可能会导致一些问题,但我不这么认为。
答案 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
,并删除该字符。