У меня есть следующий вывод, созданный с помощью printf()
заявление:
printf("She said time flies like an arrow, but fruit flies like a banana.");
но я хочу поставить фактическую цитату в двойные кавычки, поэтому вывод
Она сказала: «Время летит, как стрела, а фрукты летят, как банан».
без вмешательства в двойные кавычки, используемые для переноса строкового литерала в printf()
заявление.
Как я могу это сделать?
Побег цитаты с обратной косой черты:
printf("She said \"time flies like an arrow, but fruit flies like a banana\".");
Есть специальные побег персонажей что вы можете использовать в строковых литералах, и они обозначаются символом обратной косой черты.
К счастью, в C ++ 11 также есть более приятный подход к использованию необработанных строковых литералов.
printf("She said \"time flies like an arrow, but fruit flies like a banana\".");
становится:
printf(R"(She said "time flies like an arrow, but fruit flies like a banana".)");
Что касается добавления скобок после открывающей кавычки и перед закрывающей кавычкой, обратите внимание, что они могут представлять собой практически любую комбинацию длиной до 16 символов, что помогает избежать ситуации, когда эта комбинация присутствует в самой строке. В частности:
любой элемент базового исходного набора символов, кроме: пробел, слева
скобка (, правая скобка), обратный слеш \ и
управляющие символы, представляющие горизонтальную вкладку, вертикальную вкладку, форму
feed и newline «(N3936 §2.14.5 [lex.string] грамматика) и» не более
16 символов «(§2.14.5 / 2)
Насколько понятнее это тривиальное предложение, может быть спорным, но при использовании с отформатированными строками, такими как HTML или JSON, оно, несомненно, намного понятнее.