使用printf而不必转义双引号?

时间:2013-08-20 01:46:20

标签: c printf

在C语言中,通常不能将'用于字符串的printf。但是,我的文字中充满了双引号",我需要将它们全部转义为

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

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

6 个答案:

答案 0 :(得分: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)的内容,这非常难看。建议不要使用此技术编写可维护代码。

答案 1 :(得分:2)

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

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

char array[] = {'T', 'h', 'i', 's', ' ', 'i', 's', ' ', '"'};  // etc.
printf("%s", array);

答案 2 :(得分:2)

没有其他方法,6.4.5 String literals部分中的draft C99 standard具有以下语法:

string-literal:
  " s-char-sequenceopt "
  L" s-char-sequenceopt "

答案 3 :(得分:1)

不,在标准C中不可能。

C11 6.4.5 字符串文字

  

相同的注意事项适用于字符串文字中序列的每个元素,就像它一样   是一个整数字符常量(对于一个字符或UTF-8字符串文字)或宽   字符常量(对于宽字符串文字),除了单引号'可由其自身或由转义序列表示',但双引号“应由转义序列表示”

答案 4 :(得分: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.

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

答案 5 :(得分:0)

您可以避免使用

转义
printf(R"a SOME_STRING a"); // Note that 'a' can be any character.


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