2010-11-22 82 views
2

我運行下面的代碼(在Windows 7中,如果有差別):系統功能似乎忽略引號

char temp[20000]; 
sprintf_s(temp, 20000, "\"C:\\Program Files\\Mozilla Firefox\\firefox.exe\" \"http://www.tvtak.com/servlet/Gateway/?C=addShows&channel=%s&show=%s\"", _channels[chId], name); 
system(temp); 

在運行時,控制檯顯示:

「 C:\ Program'不被識別爲 內部或外部命令,可操作 程序或批處理文件。

'channel'不被識別爲內部命令或 外部命令,可操作程序或 批處理文件。

'show'不被識別爲 作爲內部或外部命令, 可操作的程序或批處理文件。

但是,當我通過QuickWatch獲得'temp'的值並將其粘貼到CMD時,它工作正常。這裏發生了什麼?

我應該提到我追加到字符串的參數包含非拉丁字符。這可能與它有關嗎?

回答

4

你最好用CreateProcess()來避免cmd.exe的引用地獄。但是,如果您必須使用system(),則只需將if 1==1附加到命令的開頭,以便它不會爲您刪除引號。

system("if 1==1 \"C:\Program..."); 

有關此問題,運行cmd.exe /?,尋找/S更多信息。

+0

對於CreateProcess()建議+1 – 2010-11-22 10:10:20

0

您需要將整個字符串放入另一對引號中。並儘量避免使用C++代碼中的C風格字符串。