使用printf而不必转义双引号?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用printf而不必转义双引号?相关的知识,希望对你有一定的参考价值。
在C中,通常不可能将'
用于字符串的printf
。但是,我的文字充满了双引号"
,我需要将它们全部转义为
printf("This is "test" for another "text"");
有没有可能在没有逃离printf
的情况下"
。我的意思是使用另一个字符来包装字符串。
不推荐,但您可以使用宏:
#include <stdio.h>
#define S(x) #x
int main() {
printf(S(This "is" a string (with nesting)!
));
}
这打印
This "is" a string (with nesting)!
现在分隔符是平衡的()
字符。然而,要逃避单个)
,"
或'
角色,你必须写一些类似S(right paren: ) ")" S(!
)
,这是非常难看的。建议不要将此技术用于编写可维护代码。
不,这在C语言中是不可能的。字符串文字只有一种语法,那就是它们用双引号分隔。
编写未转义引号的唯一方法是作为字符数组中的字符文字,这样更难以编写,因此在这种情况下没有理由这样做:
char array[] = {'T', 'h', 'i', 's', ' ', 'i', 's', ' ', '"'}; // etc.
printf("%s", array);
没有其他方法,draft C99 standard
部分的6.4.5 String literals
具有以下语法:
string-literal:
" s-char-sequenceopt "
L" s-char-sequenceopt "
不,在标准C中不可能。
C11 6.4.5字符串文字
相同的注意事项适用于字符串文字中序列的每个元素,就好像它是整数字符常量(对于字符或UTF-8字符串文字)或宽字符常量(对于宽字符串文字),除了单引号'可以单独表示,也可以由转义序列表示,但双引号“应由转义序列表示”。
首先,将程序的要求与解决方案分开以满足这些要求。给出最小的信息量。在这个问题中,要求是使用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.
您的应用程序可能有更多您未提及的要求,但它应该可以实现您想要的,而不是您最初认为应该完成的方式(欢迎来到“需求分析”的世界)。
你可以避免逃避使用
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");
}
以上是关于使用printf而不必转义双引号?的主要内容,如果未能解决你的问题,请参考以下文章