在 c++ 中将字符串向量转换为字符数组

Convert string vector to char array in c++

本文关键字:转换 字符 数组 向量 字符串 c++      更新时间:2023-10-16

我正在尝试在 c++ 中将字符串向量转换为字符数组。

更具体地说,我试图做的是使用以下来拆分像"ls –latr"这样的 shell 命令:

istringstream f(x);
while (getline(f, x, ' '))
{
    strings.push_back(x);
}

我相信这会给我strings[0] == "ls"strings[1]==" -latr"

然后我正在尝试执行以下操作:

execvp(strings[0], strings);

但是,我收到此错误:

错误:无法将参数"1"的"std::basic_string, std::分配器>"转换为"const char*"到"int execvp(const char*, char* const*)"

因此,我正在尝试弄清楚如何将字符串转换为 char 数组。

阅读手册会发现" execvp 提供了指向以 null 结尾的字符串的指针数组"。所以你需要创建这样一个数组。这是一种方法:

std::vector<char *> argv(strings.size() + 1);    // one extra for the null
for (std::size_t i = 0; i != strings.size(); ++i)
{
    argv[i] = &strings[i][0];
}
execvp(argv[0], argv.data());

您可以尝试使用c_str() std::string的方法。它从 std::string 类返回类似 C 的字符串,即您需要execvpe的 char *。查看此链接了解更多详情。

如果字符数组不会更改,您可以使用

strings[0].c_str()