C++ 合并字符串以'system'函数错误

C++ Combine strings for 'system' function error

本文关键字:函数 错误 system 合并 C++ 字符串      更新时间:2023-10-16

我遇到了这个我无法真正理解的 c++ 错误(我是 c++ 的新手(。我认为代码应该有效,但它没有。所以我来寻求帮助。

法典:

#include <iostream>
#include <cstdlib>
using namespace std;
class Cpy{
public:
string exc;
void cpy(string pyfile){
exc = "python" + pyfile;
system(exc);
}
};
int main(){
Cpy ex;
ex.cpy("example.py");

}

std::system()期望其字符串以指针的形式指向以 null 结尾的char数组。您不能直接交给它std::string。您可以使用c_str()std::string方法来获取指向std::string内容的 null 终止版本的指针:

system(exc.c_str());

此外,您很可能忘记在"python"和您的论点之间留一个空格。

除此之外,exc很可能是cpy()方法中的局部变量,而不是类Cpy的成员。

与其按值传递std::string对象,不如考虑以std::string_view(如果您的编译器支持 C++17(或普通const char*的形式将pyfile参数传递给cpy()。此外,如果要构建更复杂的字符串,则可能需要考虑使用std::ostringstream,而不仅仅是连接字符串对象:

void cpy(string_view pyfile)
{
ostringstream cmd;
cmd << "python " << pyfile;
system(exc.str().c_str());
}

对于只有两个字符串,这无关紧要。但是,如果您想连接更多的字符串,或者,例如,还将数字和其他需要格式化的内容合并到字符串中,使用字符串流通常似乎是一个更好的主意。