2014-07-26 48 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連接相鄰的字符串。