2012-05-08 15 views
9

Kaçışsız karakter dizisini std::string olarak girmek için en acısız yol ne olurdu? (Karakterlerden kurtulmak için düzgün nedeniyle çalışmıyor mu): Yerinestd :: string'i kaçış karakterleri olmadan C++ olarak tanımlayın

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

şey gibi bir

.

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

Nasılsınız? İçeriği bir .txt dosyasında saklayabilir ve bir '' '' dosyasına dönüştürmek için bir 'Makefile' kuralı ekleyebilir misiniz? –

+0

@MikeSamuel, Visual Studio kullanıyorum. –

+0

Downvoter, sorunun ne olduğunu açıklayabilir mi? –

cevap

22

, sadece kullanan diğer yönü çizgi (geri ileri??). Windows üzerinde çalışır:

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

FFR, ileri: /, geri: \. – chris

+4

@chris: Teşekkürler, ama çabalarınız boşa harcanıyor. Tekrar unuturum, çünkü beynim hatırlamak için yeterince önemli değil. –

+1

Bu, her zaman bazı dosya sistemi sürücülerinde çalışmayabilir veya yol MAX_PATH'den uzunsa ve genişletilmiş yol öneki kullanılırsa – paulm

0

C & C++ yalnızca dizeleri kaçmayı \ kullanarak destekler ve bunu kullanmak zorunda. Çalışmak için bir sürü yolunuz varsa, bunları bir düzenleyicide açmanızı ve \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

+5

FYI: juanchopanza'nın cevabını okudum, ham dize edebi nihayet onların hayallerini gerçekleştirdi. –

52

Sen C++ 11 raw string literals ile yapabilirsiniz: Dosya adlarında için

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

Müthiş. Geniş karakter için LR. Ve söz dizimi ilk başlarda beni karıştırdı çünkü dizenin başlangıcı ve bitişi için sınırlayıcılar çift karakter dizileridir ... "(... ve sonra ...)" –

+1

Bu sözdizimi iğrenç.() 'Yi alıntılara sokmak kimin parlak fikriydi? Ve alternatif versiyon, R "sınırlayıcı() sınırlayıcı", daha da kötüsüdür. – Andrew