2012-05-08 11 views
9

Quale sarebbe il modo più indolore per inserire la sequenza di caratteri senza escape su std::string?Definire std :: string in C++ senza caratteri di escape

Invece di

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

qualcosa come: (Non funziona a causa correttamente per sfuggire caratteri).

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

Come stai costruendo? Puoi memorizzare il contenuto in un file '.txt' e aggiungere una regola' Makefile' per convertirlo in un file .'h'? –

+0

@MikeSamuel, sto usando Visual Studio. –

+0

Il downferer può spiegare cosa c'è di sbagliato nella domanda? –

risposta

22

Per i nomi di file, basta usare l'altra direzione barra (avanti indietro??). Funziona anche su Windows:

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

FFR, avanti: /, indietro: \. – chris

+4

@chris: Grazie, ma il tuo sforzo è sprecato. Dimenticherò di nuovo perché il mio cervello non lo considera abbastanza importante da ricordare. –

+1

Questo non sempre funziona con alcuni driver del file system, o se il percorso è più lungo di MAX_PATH e viene utilizzato il prefisso del percorso esteso – paulm

0

C & C++ supporta solo usando \ per sfuggire stringhe, e si deve usarlo. Se hai un sacco di percorsi su cui lavorare, ti suggerisco di aprirli in un editor e fare una sostituzione di massa di \ with \\.

+5

FYI: leggi la risposta di juanchopanza, i letterali stringhe crudi hanno finalmente fatto la loro apparizione. –

52

È possibile farlo con C++ 11 raw string literals:

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

Fantastico. LR per carattere ampio. E la sintassi mi ha confuso all'inizio perché i delimitatori per l'inizio e la fine della stringa sono sequenze di caratteri doppie ... "(... e poi ...)" –

+1

Ew questa sintassi è disgustosa. Di chi è stata una brillante idea di mettere il() tra virgolette? E la versione alternativa, R "delimitatore() delimitatore", è ancora peggio. – Andrew

Problemi correlati