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

kev*_*rsi 21 c c++ string escaping string-literals

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

printf("She said time flies like an arrow, but fruit flies like a banana.");
Run Code Online (Sandbox Code Playgroud)

但是我想把实际的引号用双引号,所以输出是

她说"时间过得像箭一样,但果实像香蕉一样苍蝇".

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

我怎样才能做到这一点?

Mar*_*ers 57

使用反斜杠转义引号:

printf("She said \"time flies like an arrow, but fruit flies like a banana\"."); 
Run Code Online (Sandbox Code Playgroud)

您可以在字符串文字中使用特殊的转义字符,这些字符用前导反斜杠表示.


pjc*_*ard 16

值得庆幸的是,使用C++ 11还有更令人愉快的使用原始字符串文字的方法.

printf("She said \"time flies like an arrow, but fruit flies like a banana\".");
Run Code Online (Sandbox Code Playgroud)

变为:

printf(R"(She said "time flies like an arrow, but fruit flies like a banana".)");
Run Code Online (Sandbox Code Playgroud)

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

基本源字符集的任何成员除外:空格,左括号(,右括号),反斜杠\,以及表示水平制表符,垂直制表符,换页符和换行符的控制字符"(N3936§2.14.5[ lex.string] grammar)和"最多16个字符"(§2.14.5/ 2)

这个琐碎的句子有多清楚可能是值得商榷的,但是当用在像HTML或JSON这样的格式化字符串上时,毫无疑问会更加清晰.