2012-09-09 33 views
12

que tiene la siguiente salida creado utilizando una sentencia printf():¿Cómo obtener comillas dobles en un literal de cadena?

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

pero quiero poner la cita real entre comillas dobles, por lo que la salida es

Ella dijo: "El tiempo vuela como una flecha, pero la fruta vuela como un plátano ".

sin interferir con las comillas dobles usadas para envolver la cadena literal en la instrucción printf().

¿Cómo puedo hacer esto?

Respuesta

41

escapar de las cotizaciones con barras invertidas:

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

No son especiales escape characters que se puede utilizar en los literales de cadena, y éstas se indican con una barra invertida inicial.

0

Afortunadamente, con C++ 11 también existe el enfoque más agradable de usar literales de cadena sin formato.

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

se convierte en:

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

Con respecto a la adición de paréntesis después de la cita de apertura, y antes de la cotización de cierre, tenga en cuenta que pueden ser casi cualquier combinación de hasta 16 caracteres, ayudando a evitar la situación donde la combinación está presente en la cadena misma. Específicamente:

cualquier miembro del carácter fuente básica establece excepto: espacio, la izquierda paréntesis (, el paréntesis a la derecha), la barra invertida \, y los caracteres de control que representan pestaña horizontal, pestaña vertical, forma feed y nueva línea"(N3936 §2.14.5 [lex.string] gramática) y "como máximo 16 caracteres "(§2.14.5/2)

¿Qué más claro que hace que esta frase trivial podría ser discutible , pero cuando se utiliza en cadenas formateadas como HTML o JSON, es indudablemente mucho más claro.

Cuestiones relacionadas