3

C では、通常、文字列の'forを使用することはできませんprintf。ただし、二重引用符"でいっぱいのテキストがあり、それらすべてを次のようにエスケープする必要があります

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 言語ではできません。文字列リテラルの構文は 1 つだけで、二重引用符で区切られます。

エスケープされていない引用符を記述する唯一の方法は、文字配列内の文字リテラルとして記述することです。これは、より醜く、記述するのがより困難であるため、次のような場合にそうする理由はほとんどありません。

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

いいえ、他に方法はありません。indraft C99 standardセクション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");

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++

于 2019-04-27T10:23:19.277 に答える