char* a="dsa" "qwe";
printf("%s",a);
輸出:dsaqwe兩個字符串文字串聯如何工作?
我的問題是,爲什麼做這件事的工作。如果我在兩個字符串文字之間給出空格或空格,它會連接字符串文字。
這是如何工作的?
char* a="dsa" "qwe";
printf("%s",a);
輸出:dsaqwe兩個字符串文字串聯如何工作?
我的問題是,爲什麼做這件事的工作。如果我在兩個字符串文字之間給出空格或空格,它會連接字符串文字。
這是如何工作的?
它由ISO C標準定義,相鄰的字符串文字被合併爲一個。
的語言是有點乾燥(它畢竟是一個標準的),但部分C11的6.4.5 String literals
規定:
在翻譯階段6中,由 相鄰字符和相同的任何序列中指定的多字節字符序列 - 前綴寬字符串文字標記連接成單個多字節字符序列的 。
這也在5.1.1.2 Translation phases, point 6
提到,多了幾分簡潔:
相鄰字符串文字令牌是連接在一起。
這基本上意味着"abc" "def"
與"abcdef"
沒有什麼不同。
它通常用於製作同時還具有很好的格式化長字符串有用:
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 :-)";
作爲細節的標尺沒什麼問題。 –
你回答了你自己的問題。
如果我在兩個字符串文字之間給出空格或空格,它會連接字符串文字。
這是C語法的特徵之一。
我很確定這是一個編譯器功能。
不是編譯器功能,它是ISO標準。 –
...正因如此,它是在編譯器中構建的。所以它是一個編譯器功能。 –
請參閱接受的答案。不要誤導任何人。您應該閱讀一些關於編譯器的內容並檢查您的術語。 –
ISO C標準§5.1.1.2
說: -
- 相鄰字符串文字令牌是連接在一起。
- 分隔標記的白色空格字符不再重要。
實際上,第二個階段有一個階段7活動,在第六階段的相鄰字符串文字合併之後完成。在這個意義上相鄰的意思是無論如何都忽略空白區域。但是,第一個爲+1。 – paxdiablo
並回答您未經提出的問題,「這有什麼好處?」
首先,您可以將常量放在字符串文字中。您可以編寫
#define FIRST "John"
#define LAST "Doe"
const char* name = FIRST " " LAST;
const char* salutation = "Dear " FIRST ",";
然後如果您以後需要更改名稱,則只需在一個位置更改名稱即可。
這樣的事情。
請在題目中加上真實的東西。我爲你編輯了這個,請看看它是否合適。 –