C - '\n' 字符不打印新行

C - '\n' character not printing new line

我将 "abc\n" 之类的字符串传递给程序,该程序将字符串存储在缓冲区中,然后打印传入的内容。

像这样:

int main(int argc, char **argv) {
   char buffer[5];
   strncpy(buffer, argv[1], 5);
   printf("%s", buffer);

   return 0;
}

我的观点是:"abc\n"

但是打印出来的字符串是这样的:abc\n

为什么在abc后面不加一行?

当您从命令行传入 "abc\n" 时,您传入的是文字“\”,后跟文字 "n",这就是您正在做的事情。

当您在程序中将字符串定义为

char *myString = "abc\n";

“\n”在编译时转换为换行符。

它打印 abc\n 的原因是 shell 没有进行 C 风格的转义,即 shell 中的 \n 不是转义的换行符。 shell 产生的 是在您的 C 程序中作为参数传递给 main 的内容。

char * str = "abc"; 与 shell 终端中的 foo abc\n 的行为完全不同。前者由C标准规定,后者可能从shell到shell.

不等

具体如何修复取决于您的平台,以及您使用的 shell,这并不是一个真正的 C 问题。

您可能想准确解释您要做什么,然后您可以考虑是手动实现某些字符转义组合,还是使用不同的输入法。

这是 coliru 上的代码示例:http://coliru.stacked-crooked.com/a/111f9fdd28219f88

(这是代码和命令行:)

#include <stdio.h>
#include <string.h>

int main(int argc, char **argv) {
   char buffer[5];
   strncpy(buffer, argv[1], 5);
   printf("%s", buffer);

   return 0;
}

g++ -O3 -std=c++11 -Wall -Werror main.cpp && ./a.out "asd\n"

asd\n