2010-11-22 51 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风格字符串。