如何连接字符串并传递给 system() 调用
How to concatenate string and pass to a system() call?
我这里有一些代码,我试图使用它来允许用户输入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命令并更早地构建字符串。
相关文章:
- C++/CLI System.AccessViolation在托管类中调用非托管函数时出现异常
- 如何使用 C/C++ 和 system() 系统调用以外的其他方法在 Linux 中获取文件功能?
- System.AccessViolationException 从 C# 调用 c++ 函数
- 通过std::system调用python时出错
- 在linux中,mono调用我的.so-lib返回System.EntryPointNotFoundException
- 使用单独的参数调用"boost::process::system()"时,获取"execv
- 从system()调用G++会返回一个错误
- Java 1.8 本机 System.load 通过 JNI 调用C++产生 TLSv1.如何获取 TLSv1.2?
- 为什么当从面向任何 CPU 的 C# 项目调用此代码时,此代码会引发 System.AccessViolationExc
- 将 Linux system() 调用命令的输出重定向到仅可变的
- 通过 system() 函数调用防止野卡扩展
- 使用System()从CPP程序中调用LN
- 如何在 c++ 代码中的函数中调用 System() 函数
- 在程序中操作"system"调用的结果C++
- c++ system()调用没有正确记录Java返回代码
- 使用c++ STL/Boost而不是system()调用重写这个简单的函数
- system()调用使用不当
- system()调用是邪恶的
- 使用libcurl库与使用system()调用curl
- C++ "system"调用不返回正确的退出代码