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