两个string文字的连接是如何工作的?
char* a="dsa" "qwe"; printf("%s",a);
输出:dsaqwe
我的问题是为什么这个工作。 如果我给两个string文字之间的空格或空格,它连接string文字。
这是如何工作的?
它由ISO C标准定义,相邻的string文字被合并成一个单独的文字。
这个语言有点干(毕竟这是一个标准),但是第6.4.5 String literals
节C11状态的6.4.5 String literals
:
在翻译阶段6中,由任何相邻字符序列和相同前缀的宽string文字标记指定的多字节字符序列被连接成单个多字节字符序列。
5.1.1.2 Translation phases, point 6
也提到了这一点5.1.1.2 Translation phases, point 6
,更简洁一点:
相邻的string文字标记是连接的。
这基本上意味着"abc" "def"
与"abcdef"
没有区别。
对于制作较长的string通常很有用,同时仍然有很好的格式:
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 :-)";
你回答了你自己的问题。
如果我给两个string文字之间的空格或空格,它连接string文字。
这是C语法的特点之一。
回答你没有提出的问题,“这有什么好处?”
首先,你可以把常量放在string中。 你可以写
#define FIRST "John" #define LAST "Doe" const char* name = FIRST " " LAST; const char* salutation = "Dear " FIRST ",";
然后如果以后需要更改名称,则只需要在一个位置更改名称。
像这样的东西。
ISO C标准§5.1.1.2
说:
- 相邻的string文字标记是连接的。
- 分隔令牌的空白字符不再重要。
我很确定这是一个编译器function。