40

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

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

但我想把实际的报价放在双引号中,所以输出是

她说:“时光如箭,果如香蕉”。

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

我怎样才能做到这一点?

4

2 回答 2

78

用反斜杠转义引号:

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

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

于 2012-09-09T11:51:48.283 回答
38

值得庆幸的是,对于 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 个字符的任意组合,有助于避免组合出现在字符串本身中的情况。具体来说:

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

它使这个短字符串变得多么清晰可能值得商榷,但是当用于 HTML 或 JSON 等较长格式的字符串时,它无疑要清晰得多。

于 2018-01-22T12:22:56.520 回答