如何通过cstdlib系统传递带空格的参数

时间:2010-06-08 13:00:32

标签: c++ std

我有这个Windows控制台应用程序,它接受一个文件,做一些计算,然后将输出写入指定的文件。输入以“ap​​p.exe -input fullfilename”格式指定。我需要从我的C ++程序中调用此应用程序,但是在文件路径中存在空格问题。当我通过键入直接从cmd.exe调用应用程序时(为了清楚起见未指定输出文件)

"c:\first path\app.exe" -input "c:\second path\input.file"

一切都按预期工作。但是,当我尝试使用cstdlib std :: system()函数时,即

std::system(" \"c:\\first path\\app.exe\" -input \"c:\\second path\\input.file\" ");

控制台打印出c:\ first不是任何有效命令。这可能是常见的错误并且有简单的解决方案,但我一直无法找到。感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

而不是std :: system(),您应该使用Windows API中的_wspawnv函数。如果要在PATH中搜索程序,请使用_wspawnvp,而不是指定它的完整路径。

#include <stdio.h>
#include <wchar.h>
...
const WCHAR *app = L"C:\\path to\\first app.exe";
const WCHAR *argv[] = {app, L"-input", L"c:\\second path\\input file.txt"};
_wpspawnv(_P_WAIT, app, argv);

如果您100%确定您的输入文件名永远不会包含除ASCII以外的任何内容,您也可以使用_spawnv / _spawnvp。

答案 1 :(得分:0)

不要试图将引号放在std :: system()调用中。请尝试以下方法:

std::system("c:\\first\\ path\\app.exe -input c:\\second\\ path\\input.file");