char* a="dsa" "qwe";
printf("%s", a);


输出:dsaqwe

我的问题是为什么这件事起作用。如果我在两个字符串文字之间添加空格或不加空格,则它将字符串文字串联在一起。

这如何运作?

最佳答案

它是由ISO C标准定义的,相邻的字符串文字被合并为一个。

语言有点干(毕竟这是一种标准),但是6.4.5 String literalsC11部分指出:


  在转换阶段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 :-)";

关于c - 两个字符串文字的串联如何工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48866334/

10-11 19:34
查看更多