C字符串附加

时间:2011-05-12 12:22:57

标签: c string standards append

我有两个我要追加的C字符串,结果应该分配给lhs变量。我看到了一个静态初始化代码,如:

char* out = "May God" "Bless You";

打印时输出真的是"May GodBless You"。我理解这个结果可以输出一些未定义的行为。

代码实际上是在生产中,从未给出错误的结果。并不是说我们只在一个地方发表过这样的声明。可以在非常稳定的代码的多个地方看到它并用于形成sql查询。

C标准是否允许这种连接?

3 个答案:

答案 0 :(得分:6)

是的,这是有保证的。

摘自http://en.wikipedia.org/wiki/C_syntax#String_literal_concatenation

  

相邻的字符串文字是   在编译时连接;这个   允许拆分长字符串   多行,也允许字符串   由C预处理器产生的文字   定义和要附加到的宏   编译时的字符串

答案 1 :(得分:4)

是。在C中允许这种连接,它不是未定义的行为。

虽然我认为它应该产生“May GodBless You”(因为引用的部分没有空格)

答案 2 :(得分:2)

The Standard

  

5.1.1.2翻译阶段

     

6。相邻的字符串文字标记是连接的。

因此,Solaris编译器正在做正确的事情。