【问题标题】:System function seems to ignore quote marks系统函数似乎忽略引号
【发布时间】:2011-05-13 17:54:52
【问题描述】:

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

我应该提到我附加到字符串的参数包含非拉丁字符。会不会跟这有关系?

【问题讨论】:

    标签: c++ visual-studio-2008


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-21
        • 2020-01-28
        • 1970-01-01
        • 1970-01-01
        • 2013-02-11
        • 2021-10-28
        相关资源
        最近更新 更多