2012-05-08 23 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'ファイルに保存し、それを.'h'ファイルに変換する' Makefile'ルールを追加できますか? –

+0

@MikeSamuel、私はVisual Studioを使用しています。 –

+0

質問で何が間違っていると説明できますか? –

答えて

22

、ちょうど使用する他の方向スラッシュ(バック転送します?)。 Windowsでも動作します:

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

FFR、forward:/、back:\。 – chris

+4

@chris:ありがとうございますが、あなたの努力は無駄です。私の脳はそれを覚えておくほど重要ではないと考えているので、もう一度忘れるだろう。 –

+1

これは、一部のファイルシステムドライバでは必ずしも機能しません。また、パスがMAX_PATHより長く、拡張パス接頭辞が使用されている場合は – paulm

0

C & C++文字列のみをエスケープするには、\を使用してサポートし、あなたがそれを使用する必要があります。たくさんのパスがあれば、エディタで開き、\を一括置換することをお勧めします。

+5

FYI:juanchopanzaの答えを読んで、生の文字列のリテラルが最終的にそれらの出現をしました。 –

52

あなたはC++ 11 raw string literalsでそれを行うことができます。ファイル名の

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

ワイド文字用のLR。文字列の先頭と末尾の区切り文字は2文字シーケンスであるため、構文は私を最初に混乱させました... "(...と...)" –

+1

この構文はうんざりです。 ()を引用符で囲んだのは誰の明るい考えですか?そして、別のバージョンのR "区切り文字(delimiter)"はさらに悪いです。 – Andrew

関連する問題