char* a="dsa" "qwe";
printf("%s", a);
Run Code Online (Sandbox Code Playgroud)
输出:dsaqwe
我的问题是为什么这件事有效.如果我在两个字符串文字之间给出一个空格或什么都没有,它会连接字符串文字.
这是怎么回事?
pax*_*blo 33
它由ISO C标准定义,相邻的字符串文字组合成一个.
语言有点干(毕竟这是一个标准),但6.4.5 String literalsC11 部分说明:
在转换阶段6中,由任何相邻字符序列和相同前缀的宽字符串文字标记指定的多字节字符序列被连接成单个多字节字符序列.
这里也提到了C11,更简洁一点:
相邻的字符串文字标记是连接的.
这基本上意味着5.1.1.2 Translation phases, point 6没有什么不同"abc" "def".
它在制作长字符串时仍然很有用,同时仍然具有良好的格式:
char *myString = "This is a really long "
"string and I don't want "
"to make my lines in the "
"editor too long, because "
"I'm basically anal retentive :-)";
Run Code Online (Sandbox Code Playgroud)
并回答你未提出的问题,"这有什么用?"
首先,您可以将常量放在字符串文字中.你可以写
#define FIRST "John"
#define LAST "Doe"
const char* name = FIRST " " LAST;
const char* salutation = "Dear " FIRST ",";
Run Code Online (Sandbox Code Playgroud)
然后,如果您稍后需要更改名称,则只需在一个位置更改它.
像这样的东西.