C では、通常、文字列の'
forを使用することはできません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)!\n));
}
これは印刷します
This "is" a string (with nesting)!
現在、区切り文字はバランスの取れた()
文字です。)
しかし、単一の , "
, または'
文字をエスケープするには、 のようなものを書かなければならずS(right paren: ) ")" S(!\n)
、これは非常に醜いです。この手法は、保守可能なコードを作成する場合にはお勧めできません。
いいえ、それは C 言語ではできません。文字列リテラルの構文は 1 つだけで、二重引用符で区切られます。
エスケープされていない引用符を記述する唯一の方法は、文字配列内の文字リテラルとして記述することです。これは、より醜く、記述するのがより困難であるため、次のような場合にそうする理由はほとんどありません。
char array[] = {'T', 'h', 'i', 's', ' ', 'i', 's', ' ', '"'}; // etc.
printf("%s", array);
いいえ、他に方法はありません。indraft 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.
あなたのアプリケーションには、あなたが言及していないより多くの要件があるかもしれません。
//R "delimiter( raw_characters )delimiter"
printf(R"SOME/\STRING");
Raw string will terminate after the first )" it sees.
Therefore, if )" is in the string, you have to add delimiter ("a" is used below)
/* Print dog without any escape. */
printf(R"a(|\_/|
|q p| /}
( 0 )"""\
|"^"` |
||_/=\\__|)a");
}
It's C++11 feature and you can find more information in document
Simliar question have been answered escape R"()" in a raw string in C++