4

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

更具体地说,我要做的是使用以下命令拆分像“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::allocator >' 转换为 'const char*' 到 'int execvp(const char*, char* const*)'</p>

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

4

3 回答 3

6

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

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());
于 2013-10-20T20:36:34.380 回答
1

您可以尝试c_str()使用std::string. 它从类中返回类 C 字符串std::string,即您需要的 char * execvpe。检查此链接以获取更多详细信息。

于 2013-10-20T20:34:25.233 回答
0

如果char数组不会改变,你可以使用

strings[0].c_str()
于 2013-10-20T20:34:54.850 回答