7

如何使用来自 c++ 程序的参数执行命令行程序?这是我在网上找到的:

http://www.cplusplus.com/forum/general/15794/

std::stringstream stream;
stream <<"program.exe "<<cusip;
system(stream.str().c_str());

但它似乎不接受实际的程序位置,所以我不确定如何应用它。我希望有这样的东西:

std::stringstream stream;
stream <<"C:\Tests\SO Question\bin\Release\HelloWorld.exe "<<"myargument";
system(stream.str().c_str());

这给出了与反斜杠相关的几个警告 - 并且该程序不起作用。是否期望您在某个特定位置拥有该程序?

这是我在控制台中得到的输出:

'C:\Tests' 不是内部或外部命令、可运行程序或批处理文件。

附录:

所以根据乔恩的回答,对我来说正确的版本是这样的:

#include <iostream>
#include <cstdlib>
#include <sstream>
#include <cstring>
int main(int argc, char *argv[])
{

std::stringstream stream;    
stream << "\"C:\\Tests\\SO Question\\bin\\Release\\HelloWorld.exe\""
       << " " // don't forget a space between the path and the arguments
       << "myargument";
system(stream.str().c_str());

return 0;
}
4

2 回答 2

10

首先,当您希望单个反斜杠出现在实际字符串值中时,您应该在文字字符串中使用双反斜杠。这是根据语言语法;一个符合标准的编译器可能比简单地警告这一点做得更糟。

无论如何,您遇到的问题是由于在 Windows 中包含空格的路径必须用双引号引起来。由于双引号本身需要在 C++ 字符串文字中进行转义,因此您需要编写的是

stream << "\"C:\\Tests\\SO Question\\bin\\Release\\HelloWorld.exe\""
       << " " // don't forget a space between the path and the arguments
       << "myargument";
于 2013-02-11T22:15:41.163 回答
5

这给出了几个与反斜杠相关的警告

我相信\在 C++ 中使用转义字符\\可能会解决这个问题。

于 2013-02-11T22:12:43.280 回答