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
我将 "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