2014-07-26 49 views
1

今天,存储多个字符串我看到字符的用法在C如下:在在C字符数组

const char temp[] = "GET/HTTP/1.0\r\n" 
         "Host:www.google.com\r\n" 
         "\r\n"; 

起初,我以为会有一个编译错误,但实际上它通过汇编!
那么有人可以告诉我为什么它可以工作吗?
我是一个学习C编程的新人。
非常感谢!

+0

添加您编译的方式以及可能有助于解决此问题的方法和答案。 – MrAlias

+1

你试着把“;”最后。 –

+0

对不起,我忘了在这里键入......但在我的代码中,它确实存在。 –

回答

1

C有string literal concatenation,这意味着相邻的字符串文字在编译时连接在一起;这允许将长字符串拆分为多行,并且还允许在编译时将由C预处理器定义和宏生成的字符串文字附加到字符串。

例如:

printf(__FILE__ ": %d: Hello " 
     "world\n", __LINE__); 

将扩大到

printf("helloworld.c" ": %d: Hello " 
     "world\n", 10); 

这句法相当于

printf("helloworld.c: %d: Hello world\n", 10); 
1

它是由多个连接字符串字面量一个字符串。 C语言允许字符串文字彼此相邻,而不需要将任何操作符连接起来形成单个字符串。正如你所看到的,这对跨越多行源代码的字符串常量很有用。这也是有用的,当一个预处理宏定义字符串文字,你可以写类似

#define BALANCE_FMT "%5.2f" 
printf("Your balance is: " BALANCE_FMT "\n", balance); 
6

如果放置错过分号末尾,则本声明

const char temp[] = "GET/HTTP/1.0\r\n" 
        "Host:www.google.com\r\n" 
        "\r\n"; 

相当于

const char temp[] = "GET/HTTP/1.0\r\nHost:www.google.com\r\n\r\n"; 

根据描述翻译阶段的章节中的C标准,写有

6.相邻字符串文字记号被级联

Sometines它是方便易分裂的长字符串文字不适合的线分成几个较短的相邻文字。

+0

非常感谢,我的代码中有一个分号,我忘了在这里输入...无论如何,非常感谢! –

2
const char str[] = "stringstringstring"; 

const char str[] = "string" "string" "string"; 

const char str[] = "string" 
       "string" 
       "string"; 

#define NAME "string" 
const char str[] = "string" NAME "string"; 

都会有同样的结果。 C连接相邻的字符串。