2012-05-08 10 views
9

¿Cuál sería la forma más sencilla de ingresar la secuencia de caracteres sin escape a std::string?Definir std :: string en C++ sin caracteres de escape

En lugar de

std::string st = "C:\\program files\\myFile.txt"; 

algo como: (No funciona correctamente debido a escapar caracteres).

std::string st = "C:\program files\myFile.txt"; 
+0

¿Cómo está construyendo? ¿Puedes guardar el contenido en un archivo '.txt' y agregar una regla' Makefile' para convertirlo a un archivo .'h'? –

+0

@MikeSamuel, estoy usando Visual Studio. –

+0

¿Puede el infractor explicar lo que está mal en la pregunta? –

Respuesta

22

para nombres de archivo, sólo tiene que utilizar la otra barra de dirección (hacia adelante hacia atrás??). También funciona en Windows:

std::string st = "C:/program files/myFile.txt"; 
+2

FFR, adelante: /, atrás: \. – chris

+4

@chris: Gracias, pero su esfuerzo se desperdicia. Me olvidaré de nuevo porque mi cerebro no lo considera lo suficientemente importante como para recordarlo. –

+1

Esto no siempre funcionará con algunos controladores del sistema de archivos, o si la ruta es más larga que MAX_PATH y se usa el prefijo de ruta extendida – paulm

0

C & C++ sólo es compatible con el uso de \ para escapar de las cadenas, y hay que utilizarlo. Si tiene varios caminos para trabajar, le sugiero abrirlos en un editor y hacer un reemplazo masivo de \ con \\.

+5

FYI: lea la respuesta de juanchopanza, los literales de cadena sin procesar finalmente hicieron su aparición. –

52

Puede hacerlo con C++ 11 raw string literals:

std::string st = R"(C:\program files\myFile.txt)"; 
+1

Impresionante. LR para personaje ancho. Y la sintaxis me confundió al principio porque los delimitadores para el principio y el final de la cadena son secuencias de doble carácter ... "(... y luego ...)" –

+1

Ew esta sintaxis es desagradable. ¿De quién fue la brillante idea de poner el() entre comillas? Y la versión alternativa, R "delimiter() delimiter", es aún peor. – Andrew

Cuestiones relacionadas