我正在运行以下代码(在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'未被识别为 内部或外部命令,可操作 程序或批处理文件。
'频道'未被视为内部或 外部命令,可操作程序或 批处理文件。
'show'无法识别 作为内部或外部命令, 可操作程序或批处理文件。
但是当我通过QuickWatch获取'temp'的值并将其粘贴到CMD时,它工作正常。这是怎么回事?
我应该提一下,我附加到字符串的参数包含非拉丁字符。这可能与它有关吗?
答案 0 :(得分:4)
最好使用CreateProcess()
以避免cmd.exe引用地狱。但是如果你必须使用system()
,你可以简单地将if 1==1
附加到命令的开头,这样它就不会删除你的引号。
system("if 1==1 \"C:\Program...");
有关此问题的详细信息,请运行cmd.exe /?
并查找/S
。
答案 1 :(得分:0)
您需要将整个字符串放入另一对引号中。并尝试避免使用C ++代码中的C风格字符串。