【问题标题】:How to properly use system() to execute a command in C++?如何正确使用 system() 在 C++ 中执行命令?
【发布时间】:2011-10-04 01:48:39
【问题描述】:

我是 Windows 下的 C++ 编程新手。我正在尝试使用 system() 函数在 C++ 代码中执行命令 cuobjdump

system("C:\\program files\\nvidia gpu computing...\\cuobjdump.exe --dump-cubin C:\\..\\input.exe");

输出:

Usage  : cuobjdump [options] <file>

接下来是 cuobjdump 的选项列表。

当我执行这个程序时,我总是得到命令行中显示的 cuobjdump 帮助选项。就好像系统调用不解析文件名一样。我究竟做错了什么?我在使用 createprocess 时得到了相同的结果。选项--dump-cubin 给出了一个错误,好像我打错了一样。

【问题讨论】:

  • 至少,您需要确保将任何反斜杠转义为 \\ vs \。
  • @kerrek 请看看我的问题。我的一些问题没有得到答案。 :(当我看到一个时我会接受一个
  • 你能打印出确切的程序输出吗?此外,如果您实际使用\` instead of `,请更正代码(或复制确切的代码)。
  • 您是否尝试过将双引号内的文本复制并粘贴到 DOS 窗口?
  • 当您的问题包含您实际使用的代码时,您是否看到您的问题能够得到正确回答?

标签: c++ function system


【解决方案1】:

我建议您使用CreateProcess,或ShellExecute / ShellExecuteEx,因为您使用的是Windows。 systemShellExecute 最终只调用 CreateProcess

【讨论】:

  • 问题已解决,结果发现我缺少双引号。在我原来的帖子中,我提到我用 CreateProcess 得到了相同的结果!我不是反对者,但我认为我应该回应您的回答! :)
【解决方案2】:

尝试一下(即用" 包围cuobjdump.exe 路径,在C++ 中正确转义为\"):

system("\"C:\\program files\\nvidia gpu computing...\\cuobjdump.exe\" --dump-cubin C:\\..\\input.exe");

【讨论】:

  • 不客气 :) 作为另一种方式,我认为您可以将 cuobjdump.exe 添加到您的 PATH
  • 我已经这样做了。实际的问题是文件路径必须放在双引号中并相应地转义。 :) 无论如何,你的小费向我展示了我的疏忽!再次感谢
【解决方案3】:

假设path 是正确的,您必须在字符串中使用双\\ 来表示单个\

【讨论】:

    【解决方案4】:

    最明显的是,\ 是 C/C++ 字符串中的转义字符,因此如果要按字面意思使用,则必须加倍。

    system("cuobjdump --dump-cubin path\\filename.exe");
    

    【讨论】:

      【解决方案5】:
      system("cuobjdump --dump-cubin path\filename.exe");
      

      编译器将\f解释为字符串转义序列,试试path\\filename.exe

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-05-13
        • 1970-01-01
        • 2021-02-27
        • 1970-01-01
        • 2010-09-19
        • 1970-01-01
        • 2019-09-27
        • 1970-01-01
        相关资源
        最近更新 更多