char* a="dsa" "qwe";
printf("%s", a);
输出:dsaqwe
我的问题是为什么这件事有效。如果我在两个字符串文字之间给出一个空格或什么都没有,它会连接字符串文字。
这是如何工作的?
答案 0 :(得分:29)
它由ISO C标准定义,相邻的字符串文字组合成一个。
语言有点干(毕竟它是一个标准)但6.4.5 String literals
个C11
个部分:
在翻译阶段6中,由任何相邻字符序列和带有相同前缀的宽字符串文字标记指定的多字节字符序列被连接成单个多字节字符序列。
在同一标准的5.1.1.2 Translation phases, point 6
中也提到了这一点,虽然更简洁一点:
连接相邻的字符串文字标记。
这基本上意味着"abc" "def"
与"abcdef"
没有区别。
通常在制作长字符串时仍然很有用,但仍然具有良好的格式,例如:
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 :-)";
答案 1 :(得分:7)
回答你未提出的问题,“这有什么好处?”
首先,您可以将常量放在字符串文字中。你可以写
#define FIRST "John"
#define LAST "Doe"
const char* name = FIRST " " LAST;
const char* salutation = "Dear " FIRST ",";
然后如果你以后需要更改名称,你只需要在一个地方更改它 这样的事情。
答案 2 :(得分:6)
你回答了自己的问题。
如果我在两个字符串文字之间给出一个空格或什么都没有,它会连接字符串文字。
这是C语法的一个特性。
答案 3 :(得分:1)
ISO C标准§5.1.1.2
说: -
- 连接相邻的字符串文字标记。
- 分隔标记的空白字符不再重要。
醇>