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

How to concatenate string and pass to a system() call?

本文关键字:system 调用 串并 字符 何连接 连接 字符串      更新时间:2023-10-16

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

system("ping " + INPUT);

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

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

std::string s2 = "ping" + INPUT;
system(s2.c_str());

当你/如果你经常这样做,构建字符串的明显路线,那么调用system(your_string.c_str());可能会有点烦人。

为了使这种情况更可口,我曾经编写过这段代码,您可能需要考虑:

执行.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;

系统采用常量字符指针而不是字符串。您可以将"INPUT"附加到ping命令并更早地构建字符串。