我在这里有一些代码,我试图让用户输入一个IP地址并让代码ping它。我现在只是通过system()函数。我的问题是我不能让system()函数读取字符串以及变量。看看这里:
system("ping " + INPUT);
INPUT之前已经定义为字符串,它保存用户放入程序中ping的IP地址。如果我使用+运算符,Visual Studio会给我一个错误,因为我在两个字符串上使用数学运算符。我用什么操作符来组合两个不同字符串的内容?
答案 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命令并提前构建字符串。