当cmd运行时,系统调用会生成错误

时间:2015-07-07 09:18:25

标签: c++ command-line system

我试图通过我的c ++代码运行enfuse来为hdr融合一些图像。我的代码基本上是这样的:

  std::string cmd=getCmd();
  system(cmd.c_str());

getcmd将返回如下字符串:

"C:\code\Debug\enfuse" --hard-mask      "C:\Users\m\AppData\Local\Temp\pp\0-0.jpg"        "C:\Users\m\AppData\Local\Temp\pp\1-0.jpg "        "C:\Users\m\AppData\Local\Temp\pp\2-0.jpg "        "C:\Users\m\AppData\Local\Temp\pp\3-0.jpg "        "C:\Users\m\AppData\Local\Temp\pp\4-0.jpg "    -o "C:\Users\m\AppData\Local\Temp\pp\0fuse.tif"  

当我使用上面的代码运行此字符串时,我收到此错误:

The filename, directory name, or volume label syntax is incorrect.

但是如果我复制字符串并将其粘贴到命令窗口中,那么它运行良好没有任何问题。

我检查过并发现我从目录条目中删除了引号然后它运行良好,但是如果我删除了引号,那么如果路径有空格,则命令字符串是错误的并且它不起作用。

为什么这个命令在命令窗口上运行良好,但不能使用系统?

我正在开发Windows,但这段代码应该是独立于平台的,我应该可以在Linux上编译它。

编辑1

我注意到在字符串的某些部分引用之前有一个空格,因此我删除它们并且字符串变为:

"C:\code\Debug\enfuse" --hard-mask      "C:\Users\m\AppData\Local\Temp\pp\0-0.jpg"        "C:\Users\m\AppData\Local\Temp\pp\1-0.jpg"        "C:\Users\m\AppData\Local\Temp\pp\2-0.jpg"        "C:\Users\m\AppData\Local\Temp\pp\3-0.jpg"        "C:\Users\m\AppData\Local\Temp\pp\4-0.jpg"    -o "C:\Users\m\AppData\Local\Temp\pp\0fuse.tif" 

这个字符串在复制到cmd窗口时运行良好但是当我通过系统调用运行它时,我收到此错误:

The input line is too long.

0 个答案:

没有答案