如何连接字符串并传递给system()调用?

时间:2014-03-03 06:44:52

标签: c++

我在这里有一些代码,我试图让用户输入一个IP地址并让代码ping它。我现在只是通过system()函数。我的问题是我不能让system()函数读取字符串以及变量。看看这里:

system("ping " + INPUT);

INPUT之前已经定义为字符串,它保存用户放入程序中ping的IP地址。如果我使用+运算符,Visual Studio会给我一个错误,因为我在两个字符串上使用数学运算符。我用什么操作符来组合两个不同字符串的内容?

3 个答案:

答案 0 :(得分:4)

问题不在于字符串连接。 system需要指向char的指针,而不是std:: string。所以你需要像

这样的东西
std::string s2 = "ping" + INPUT;
system(s2.c_str());

答案 1 :(得分:2)

当你经常这样做的时候,构建一个字符串的明显路线,然后调用system(your_string.c_str());可能有点烦人。

为了让这种情况更加可口,我曾写过你可能想要考虑的代码:

exec.hpp:

#ifndef EXEC_HPP_INC_
#define EXEC_HPP_INC_

#include <sstream>
#include <cstdlib>

inline std::ostream &execute(std::ostream &s) {
    std::ostringstream &ss = dynamic_cast<std::ostringstream &>(s);
    std::system(ss.str().c_str());
    return s;
}

inline std::ostringstream &operator<<(std::ostringstream &s,
                          std::ostringstream &(*manip)(std::ostringstream &s))
{
    return manip(s);
}

#endif

用法是这样的:

#include "exec.hpp"

std::ostringstream x;

x << "ping " << INPUT << execute;

答案 2 :(得分:0)

系统采用const char指针而不是字符串。 你可以追加&#34; INPUT&#34; ping命令并提前构建字符串。