我正在尝试将字符串向量转换为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);
然而,我收到此错误:
错误:无法将'std :: basic_string,std :: allocator>'转换为'const char *'以将参数'1'转换为'int execvp(const char *,char * const *)'
因此,我试图找出如何将字符串转换为char数组。
答案 0 :(得分:5)
阅读the manual表明“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());
答案 1 :(得分:1)
您可以尝试使用c_str()
std::string
方法。它从std::string
类返回类似C的字符串,即execvpe
所需的char *。查看this link了解详情。
答案 2 :(得分:0)
如果不更改char数组,可以使用
strings[0].c_str()