3 回答

TA貢獻(xiàn)1784條經(jīng)驗 獲得超8個贊
好吧。最簡單的方法是使用以下事實:相鄰字符串文字由編譯器連接:
const char *text =
"This text is pretty long, but will be "
"concatenated into just a single string. "
"The disadvantage is that you have to quote "
"each part, and newlines must be literal as "
"usual.";
縮進(jìn)并不重要,因為它不在引號內(nèi)。
只要您注意避開嵌入式換行符,也可以執(zhí)行此操作。失敗,就像我的第一個答案一樣,將不會編譯:
const char * text2 =
“另一方面,我瘋了\
并真正讓文字跨越幾行,
不用麻煩引用每一行的\
內(nèi)容。這可行,但是您不能縮進(jìn)?!?/p>
同樣,請注意每行末尾的那些反斜杠,它們必須緊接在行末之前,它們在源代碼中轉(zhuǎn)義了換行符,以便所有內(nèi)容都好像換行符不在那里。在反斜杠的位置,字符串中不會出現(xiàn)換行符。使用這種形式,您顯然無法縮進(jìn)文本,因為縮進(jìn)將隨后成為字符串的一部分,并在字符串中添加隨機(jī)空格。

TA貢獻(xiàn)1752條經(jīng)驗 獲得超4個贊
在C ++ 11中,您具有原始字符串文字。shell和腳本語言(例如Python,Perl和Ruby)中的此處文本有點類似。
const char * vogon_poem = R"V0G0N(
O freddled gruntbuggly thy micturations are to me
As plured gabbleblochits on a lurgid bee.
Groop, I implore thee my foonting turlingdromes.
And hooptiously drangle me with crinkly bindlewurdles,
Or I will rend thee in the gobberwarts with my blurlecruncheon, see if I don't.
(by Prostetnic Vogon Jeltz; see p. 56/57)
)V0G0N";
字符串中的所有空格和縮進(jìn)以及換行符都將保留。
它們也可以是utf-8 | 16 | 32或wchar_t(具有通常的前綴)。
我應(yīng)該指出,這里實際上不需要轉(zhuǎn)義序列V0G0N。它的存在將允許在字符串中放入)“。換句話說,我可以將
"(by Prostetnic Vogon Jeltz; see p. 56/57)"
(請注意額外的引號),并且上面的字符串仍然正確。否則我也可以使用
const char * vogon_poem = R"( ... )";
仍然需要引號內(nèi)的括號。

TA貢獻(xiàn)1906條經(jīng)驗 獲得超3個贊
輸入多行字符串的一種可能方便的方法是使用宏。僅當(dāng)引號和括號之間是平衡的并且不包含“頂級”逗號時,此方法才有效:
#define MULTI_LINE_STRING(a) #a
const char *text = MULTI_LINE_STRING(
Using this trick(,) you don't need to use quotes.
Though newlines and multiple white spaces
will be replaced by a single whitespace.
);
printf("[[%s]]\n",text);
與gcc 4.6或g ++ 4.6一起編譯,會產(chǎn)生: [[Using this trick(,) you don't need to use quotes. Though newlines and multiple white spaces will be replaced by a single whitespace.]]
請注意,,除非在括號或引號中包含,否則不能在字符串中。單引號是可能的,但是會產(chǎn)生編譯器警告。
編輯:如評論中所述,#define MULTI_LINE_STRING(...) #__VA_ARGS__允許使用,。
- 3 回答
- 0 關(guān)注
- 801 瀏覽
添加回答
舉報