使用 std::string 调用系统?
Calling system with std::string?
我正在将两个 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 )
相关文章:
- 有什么好的方法可以让系统调用代理允许在单元测试中进行模拟
- 如果整个应用程序是虚拟映射的,为什么 new 会进行系统调用?
- 如何将C++系统调用连接到 freertos
- 如何使用 C/C++ 和 system() 系统调用以外的其他方法在 Linux 中获取文件功能?
- 系统调用:一次和多次,哪个更好?
- 使用路径和空格的系统调用
- 是否有等效于 macOS 上的 clone() 系统调用?
- 从C++调用系统调用节点?
- C++测试程序中的非法系统调用(对角矩阵元素程序的总和)
- 英特尔 Pin:如何获取系统调用的返回地址
- 如何使用低级系统调用从 stdin 和输入文件中获取字节数
- 使用模拟器C++从RISC-V裸机程序调用printf系统调用时失败
- 动态执行的 ARM ASM 系统调用,可从C++重新定位
- 如何知道我正在使用的Linux OS是否具有特定的系统调用
- 当C 中的系统调用conconculables时,参数字符串中的字符损失
- 调用系统调用函数时出现异常
- 在 boost::asio 中自定义套接字/关闭系统调用
- 系统调用失败"Incorrect Section Name -e" C++
- 绕过系统调用 C++
- 以非 root 用户身份调用 mount() 系统调用