如何将双引号引入字符串文字?

时间:2012-09-09 11:50:13

标签: c++ c string escaping string-literals

我使用printf()语句创建了以下输出:

printf("She said time flies like an arrow, but fruit flies like a banana.");

但我想将实际引用放在双引号中,因此输出为

  

她说“时间过得像箭一样,但果实像香蕉一样苍蝇”。

不会干扰用于在printf()语句中包装字符串文字的双引号。

我该怎么做?

2 个答案:

答案 0 :(得分:52)

使用反斜杠转义引号:

printf("She said \"time flies like an arrow, but fruit flies like a banana\"."); 

您可以在字符串文字中使用特殊escape characters,并使用前导反斜杠表示。

答案 1 :(得分:13)

值得庆幸的是,使用C ++ 11时,还有一种更令人愉悦的方法是使用原始字符串文字。

printf("She said \"time flies like an arrow, but fruit flies like a banana\".");

变为:

printf(R"(She said "time flies like an arrow, but fruit flies like a banana".)");

关于在开头引号之后和结束引号之前添加括号,请注意它们几乎可以是最多16个字符的任意组合,有助于避免字符串本身中存在组合的情况。具体做法是:

  

基本源字符集的任何成员除外:空格,左边   括号(,右括号),反斜杠\和   控制字符表示水平制表符,垂直制表符,表单   feed和newline“(N3936§2.14.5[lex.string]语法)和”最多   16个字符“(§2.14.5/ 2)

这使得这个琐碎的句子有多清楚可能是有争议的,但是当在HTML或JSON等格式化字符串上使用时,毫无疑问会更加清晰。

相关问题