使用 std::string 调用系统?

Calling system with std::string?

本文关键字:系统 调用 string std 使用      更新时间:2023-10-16

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

无论如何,由于system()期待一个字符,这将不起作用,我似乎无法弄清楚,提前感谢!(这是一个代码片段,希望能说明我想说的话)

#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;
}

system函数需要一个const char*参数。形成一个字符串,然后向system函数提供指向以 null 结尾的字符数组的指针:

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

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

此外,使用system()是一个坏主意,您可以通过fstream写信给.bashrc

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

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

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

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
}

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

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