2016-02-11 56 views
2

爲什麼在'%'處出現錯誤爲錯誤的格式化特殊字符。C++將字符寫入批處理文件

ofstream batch; 
batch.open("C:\tesfile.bat", ios::out); 
batch << "@echo off\n"; 
batch << "set Dir=C:\Users\%USERNAME%\AppData\ \n"; 

另外我給C:\創建它在該應用文件夾(其中該應用被放置)創建bat文件bat文件。

請幫忙。

回答

1

在一個字符串中,你需要將你的反斜槓(\)作爲\\。否則,編譯器會認爲你只是試圖插入特殊字符,如\n

batch.open("C:\\tesfile.bat", ios::out); 
batch << "@echo off\n"; 
batch << "set Dir=C:\\Users\\%USERNAME%\\AppData\\ \n"; 

這樣一想鍛鍊,想象一下,如果你沒有逃脫你的反斜線會發生什麼:

batch.open("C:\nifty_folder", ios::out); //\n in "nifty" causes a newline! 

事實上,您的原始代碼有意想不到的後果!

batch.open("C:\tesfile.bat", ios::out); //\t is a tab! 
2

你要麼逃避特殊字符\在你的字符串,或使用C++ 11個的原始文字是這樣的(更好的選擇,我的看法!):

batch.open(R"(C:\tesfile.bat)", ios::out); 
+0

@RPGillespie,發現和固定:)但謝謝你指出這一點。 – SergeyA