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

时间:2015-09-26 16:12:54

标签: c string character buffer newline

我将一个字符串如“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之后不添加新行?

2 个答案:

答案 0 :(得分:2)

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

char * str = "abc";与shell终端中的foo abc\n没有相同的行为。前者由C标准规定,后者可能因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&amp;&amp; ./a.out“asd \ n”

     

ASD \ n

答案 1 :(得分:1)

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

在程序中将字符串定义为

nil

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