两个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说:

  1. 相邻的string文字标记是连接的。
  2. 分隔令牌的空白字符不再重要。

我很确定这是一个编译器function。