C ++合并字符串以解决“系统”功能错误

时间:2018-10-14 01:28:02

标签: c++

我遇到了一个我不太了解的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");

}

1 个答案:

答案 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());
}

仅需两个字符串就可以了。但是,如果您想连接更多的字符串,或者例如也将数字和其他需要格式化的内容合并到字符串中,那么使用字符串流通常似乎是一个更好的主意。