2012-05-08 59 views
9

什麼是最無痛的方式輸入未轉義字符序列std::string用C定義的std :: string ++沒有轉義字符

代替

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

是這樣的:(不正常工作,由於轉義字符)。

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

你是如何建設?你可以將內容存儲在'.txt'文件中,並添加一個'Makefile'規則將其轉換爲.'h'文件? –

+0

@MikeSamuel,我正在使用Visual Studio。 –

+0

downvoter可以解釋問題中的錯誤嗎? –

回答

22

對於文件名,只需要用另一個方向斜線(向前回來?)。它也適用於Windows:

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

FFR,轉發:/,返回:\。 – chris

+4

@chris:謝謝,但是你的努力被浪費了。我會再次忘記,因爲我的大腦並不認爲它足夠重要。 –

+1

這並不總是適用於某些文件系統驅動程序,或者路徑長度超過MAX_PATH並且使用了擴展路徑前綴 – paulm

0

Ç& C++僅支持使用\逃避字符串,你必須使用它。如果你有一堆工作的路徑,我建議在編輯器中打開它們並用\\批量替換\。

+5

供參考:閱讀juanchopanza的回答,原始字符串文字最終作出了幻影。 –

52

你可以用C++ 11 raw string literals做到這一點:

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

太棒了。 LR爲寬字符。起初語法混淆了我,因爲字符串的開頭和結尾的分隔符是雙字符序列...「(...然後...)」 –

+1

Ew此語法令人噁心。把()放在引號中是誰的好主意?而另一個版本R「分隔符()分隔符」更糟糕。 – Andrew

相關問題