用std :: string调用系统?

时间:2018-01-27 22:11:31

标签: c++

我将两个std :: string&#传递给一个创建别名的函数,并将其回显到linux中的bashrc并遇到一些问题。

无论如何,因为系统()期待一个字母,这不会工作,我似乎无法弄清楚,提前感谢! (这是一个代码片段,希望能够说明我想说的内容)

#include <iostream>

int create_alias(std::string&, std::string&);

int main(void)
{

    return 0;
}

int create_alias(std::string &alias, std::string &name)
{
    #ifndef __linux__
        std::cout << "Program not  supported, aborting!";
        return 1;
    #endif
    if ( system("echo alias " + name + "='" + alias + "' >> .bashrc") != 0 )
        return 1;
    return 0;
}

5 个答案:

答案 0 :(得分:1)

system函数需要const char*参数。形成一个字符串,然后将pointer to a null terminated character array提供给system函数:

std::string s = "echo alias " + name + "='" + alias + "' >> .bashrc";
if (system(s.c_str()) != 0)

答案 1 :(得分:1)

您可以使用yourstring.c_str(),它会返回char *

此外,使用system()bad idea,您只需通过.bashrc写信至fstream

答案 2 :(得分:0)

从您使用的字符串中获取const char * .c_str()

string msg="echo alias " + name + string("='" + alias + "' >> .bashrc";
system(msg.c_str());

答案 3 :(得分:0)

使用std::string::c_str()方法从const char *获取std::string,例如:

int create_alias(const std::string &alias, const std::string &name)
{
    #ifndef __linux__
    std::cout << "Program not supported, aborting!";
    return 1;
    #else
    std::string cmd = "echo alias " + name + "='" + alias + "' >> .bashrc";
    if ( std::system(cmd.c_str()) != 0 )
        return 1;
    return 0;
    #endif
}

答案 4 :(得分:0)

std::string::c_str()函数返回const char* C字符串:

if ( system( (std::string("echo alias ") + 
              name + 
              "='" + 
              alias + 
              "' >> .bashrc").c_str() ) != 0 )