3 回答
TA贡献1775条经验 获得超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.";
缩进并不重要,因为它不在引号内。
只要您注意避开嵌入式换行符,也可以执行此操作。失败,就像我的第一个答案一样,将不会编译:
const char * text2 =
“另一方面,我疯了\
并真正让文字跨越几行,
不用麻烦引用每一行的\
内容。这可行,但是您不能缩进。”
同样,请注意每行末尾的那些反斜杠,它们必须紧接在行末之前,它们在源代码中转义了换行符,以便所有内容都好像换行符不在那里。在反斜杠的位置,字符串中不会出现换行符。使用这种形式,您显然无法缩进文本,因为缩进将随后成为字符串的一部分,并在字符串中添加随机空格。
TA贡献1853条经验 获得超9个赞
在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";
字符串中的所有空格和缩进以及换行符都将保留。
它们也可以是utf-8 | 16 | 32或wchar_t(具有通常的前缀)。
我应该指出,这里实际上不需要转义序列V0G0N。它的存在将允许在字符串中放入)“。换句话说,我可以将
"(by Prostetnic Vogon Jeltz; see p. 56/57)"
(请注意额外的引号),并且上面的字符串仍然正确。否则我也可以使用
const char * vogon_poem = R"( ... )";
仍然需要引号内的括号。
TA贡献1725条经验 获得超7个赞
输入多行字符串的一种可能方便的方法是使用宏。仅当引号和括号之间是平衡的并且不包含“顶级”逗号时,此方法才有效:
#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一起编译,会产生: [[Using this trick(,) you don't need to use quotes. Though newlines and multiple white spaces will be replaced by a single whitespace.]]
请注意,,除非在括号或引号中包含,否则不能在字符串中。单引号是可能的,但是会产生编译器警告。
编辑:如评论中所述,#define MULTI_LINE_STRING(...) #__VA_ARGS__允许使用,。
- 3 回答
- 0 关注
- 406 浏览
添加回答
举报