我遇到了一个我不太了解的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");
}
答案 0 :(得分:0)
std::system()
期望其字符串为指向char
的以空值终止的数组的指针的形式。您不能直接将其交给std::string
。您可以使用std::string
的{{3}}方法来获取指向std::string
内容的以空值终止的版本的指针:
system(exc.c_str());
此外,您很可能忘记在"python"
和论据之间留一个空格。
除此之外,exc
最有可能是cpy()
方法中的局部变量,而不是类Cpy
的成员。
我考虑将std::string
参数以c_str()
的形式传递给pyfile
(如果您的编译器支持C,而不是按值传递cpy()
对象) ++ 17)或普通的const char*
。此外,如果您要构建更复杂的字符串,则可能要考虑使用std::string_view
而不是仅连接字符串对象:
void cpy(string_view pyfile)
{
ostringstream cmd;
cmd << "python " << pyfile;
system(exc.str().c_str());
}
仅需两个字符串就可以了。但是,如果您想连接更多的字符串,或者例如也将数字和其他需要格式化的内容合并到字符串中,那么使用字符串流通常似乎是一个更好的主意。