0

我无法让 system() 在字符串变量中运行命令。

ostringstream convert;
convert << getSeconds(hours);
string seconds = convert.str();    /* converts the output of 'getSeconds()' into
                                      a string and puts it into 'seconds' */

string cmd = "shutdown /s /t " + seconds;

system(cmd);

getSeconds()只需以小时为单位获取一个 int,将其转换为秒并以秒为单位返回一个 int。一切运行良好,没有错误,直到达到system(cmd);. 然后编译器会吐出这个错误:

error: cannot convert 'std::string {aka std::basic_string<char>}' to
'const char*' for argument '1' to 'int system(const char*)'

这是我的包括:

#include <iostream>
#include <string>
#include <cstdlib>
#include <sstream>
4

2 回答 2

5

我知道评论已经回答了这个问题,但没有真正解释:

system函数是一个 C 函数。它不“理解” C++ 风格的字符串。为此,您将需要使用该c_str()功能。换句话说,您需要system(cmd.c_str());.

这适用于 C++ 中仍然可用的大量 C 风格函数,因为 C++ 的主要特性之一是您仍然可以在 C++ 中使用传统的 C 代码(大部分)。因此,这同样适用于几乎所有采用字符串的 C 风格函数 -printf("cmd=%s", cmd.c_str());将打印您的命令是什么。

可以编写自己的包装函数:

int system(const std::string &cmd)
{
   return system(cmd.c_str());
}

现在,您的其余代码可以system与常规 C++ 样式字符串一起使用。

于 2013-07-24T23:44:51.220 回答
2

system 接受 C 字符串而不是 std::string,因此您必须先调用 c_str 函数。

system(cmd.c_str());
于 2013-07-24T23:44:38.973 回答