3

在 C 中,通常不可能使用'forprintf字符串。但是,我有充满双引号的文本,"我需要将它们全部转义为

printf("This is \"test\" for another \"text\"");

是否有可能以printf某种方式不逃避"。我的意思是使用另一个字符来包装字符串。

4

6 回答 6

5

不推荐,但您可以使用宏:

#include <stdio.h>
#define S(x) #x

int main() {
    printf(S(This "is" a string (with nesting)!\n));
}

这打印

This "is" a string (with nesting)!

现在分隔符是平衡()字符。但是,要转义单个),"'字符,您必须编写类似 的S(right paren: ) ")" S(!\n)内容,这非常难看。不建议将此技术用于编写可维护的代码。

于 2013-08-20T01:53:51.797 回答
2

不,这在 C 语言中是不可能的。字符串文字只有一种语法,那就是它们用双引号分隔。

编写非转义引号的唯一方法是作为字符数组中的字符文字,这样更丑更难写,所以在这种情况下几乎没有理由这样做:

char array[] = {'T', 'h', 'i', 's', ' ', 'i', 's', ' ', '"'};  // etc.
printf("%s", array);
于 2013-08-20T01:48:51.453 回答
2

不,没有别的办法,draft C99 standardin 部分6.4.5 String literals的语法如下:

string-literal:
  " s-char-sequenceopt "
  L" s-char-sequenceopt "
于 2013-08-20T01:50:49.243 回答
1

不,这在标准 C 中是不可能的。

C11 6.4.5字符串文字

相同的考虑适用于字符串文字中序列的每个元素,就好像它在整数字符常量(对于字符或 UTF-8 字符串文字)或宽字符常量(对于宽字符串文字)中一样,除了单引号 ' 可以单独表示,也可以由转义序列 \' 表示,但双引号 " 应由转义序列 \" 表示

于 2013-08-20T01:55:18.693 回答
0

首先,将程序的需求与解决方案分开以满足这些需求。给定最少的信息量。在这个问题中,要求是使用 C 打印带有双引号的字符串。在 C 中有几种方法可以做到这一点。

例如,下面的代码片段:

char string[] = "This string \" has one double quote.";

printf("This string %cprints%c with %cdouble%c quotes", '"', '"', '"', '"');
printf("%s", string);

产生:

This string "prints" with "double" quotes.
This string " has one double quote.

您的应用程序可能有更多您没有提到的要求,但它应该可以实现您想要的,而不是您最初认为应该完成的方式(欢迎来到“需求分析”的世界)。

于 2013-08-20T06:44:07.033 回答
0
//R "delimiter( raw_characters )delimiter"

printf(R"SOME/\STRING");

原始字符串将在它看到的第一个 )" 之后终止。

因此,如果 )" 在字符串中,则必须添加分隔符(下面使用“a”)

/* Print dog without any escape. */
printf(R"a(|\_/|
|q p|   /}
( 0 )"""\
|"^"`    |
||_/=\\__|)a");
}

它是 C++11 功能,您可以在 文档中找到更多信息

已在 C++ 中的原始字符串中回答了类似的问题

于 2019-04-27T10:23:19.277 回答