2012-09-09 22 views
12

は私がprintf()文で使用して作成し、以下の出力があります。出力は、彼女は言った文字列リテラルに二重引用符を付けるにはどうすればよいですか?

あるので

printf("She said time flies like an arrow, but fruit flies like a banana."); 

は、しかし、私は、二重引用符で、実際の引用を置きたい「時間は次のように飛びます矢印が、果物はバナナのように飛ぶ "。

printf()ステートメントに文字列リテラルをラップするために使用される二重引用符を使用することなく、

どうすればいいですか?

答えて

41
は、バックスラッシュで引用符をエスケープ

printf("She said \"time flies like an arrow, but fruit flies like a banana\"."); 

がありますが、文字列リテラルで使用できる特別なescape charactersであり、これらは大手バックスラッシュで表記されています。

0

ありがたいことに、C++ 11では、生の文字列リテラルを使用する方が気に入っています。開口部の引用の後の括弧の追加に関しては

printf(R"(She said "time flies like an arrow, but fruit flies like a banana".)"); 

、および終了引用符の前に、彼らは避ける助け、最大16文字のほぼすべての組み合わせでできることに注意してください:

printf("She said \"time flies like an arrow, but fruit flies like a banana\"."); 

になり文字列自体にコンビネーションが存在する状況。具体的には:

除いて設定された基本ソース文字の任意のメンバー:スペース、左 括弧(右括弧)、バックスラッシュ\、水平タブ、垂直タブを表す 制御文字、フォーム フィードそれはこの些細な文は議論の余地があるかもしれない作るどのくらい明確にし、改行」(N3936§2.14.5[lex.string]文法)と "最大で 16文字"(§2.14.5/ 2)

HTMLやJSONのような書式設定された文字列で使用された場合、それは明らかにはっきりしています。

関連する問題