我将一个字符串如“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之后不添加新行?
答案 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”在编译时转换为换行符。