系统功能似乎忽略了引号

时间:2010-11-22 09:48:02

标签: c++ visual-studio-2008

我正在运行以下代码(在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时,它工作正常。这是怎么回事?

我应该提一下,我附加到字符串的参数包含非拉丁字符。这可能与它有关吗?

2 个答案:

答案 0 :(得分:4)

最好使用CreateProcess()以避免cmd.exe引用地狱。但是如果你必须使用system(),你可以简单地将if 1==1附加到命令的开头,这样它就不会删除你的引号。

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

有关此问题的详细信息,请运行cmd.exe /?并查找/S

答案 1 :(得分:0)

您需要将整个字符串放入另一对引号中。并尝试避免使用C ++代码中的C风格字符串。