在C语言中,通常不能将'
用于字符串的printf
。但是,我的文字中充满了双引号"
,我需要将它们全部转义为
printf("This is \"test\" for another \"text\"");
是否可以printf
以某种方式逃避"
。我的意思是使用另一个字符来包装字符串。
答案 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");
}