所以我想将参数传递给以下函数
execve(char *filename, char *argv[], char *envp[])
目前我argv[]
是一个字符串数组。我想把它转换成a char* array
,这样我就可以把它传递给这个函数。
我环顾四周,发现了许多将字符串转换为char
数组的方法,但是如何将字符串数组转换为 char 数组的数组,我想这将是正确的术语有什么帮助吗?
您需要获取std::string
s 中数据的地址。请注意,这些字符串不需要以空字符结尾,即您需要确保所有字符串都以空字符结尾。此外,作为传递的数组argv
也需要最后一个元素是空指针。您可以使用以下代码:
std::string array[] = { "s1", "s2" };
std::vector<char*> vec;
std::transform(std::begin(array), std::end(array),
std::back_inserter(vec),
[](std::string& s){ s.push_back(0); return &s[0]; });
vec.push_back(nullptr);
char** carray = vec.data();
使用 C++03 编译时,需要进行一些更改:
nullptr
你需要使用0
.std::string
中,不保证是连续的,即,您需要一个额外的辅助std::vector<char>
来保存连续的字符序列。没有函数begin()
和end()
推断数组的大小,但它们可以很容易地在 C++03 中实现:
template <typename T, int Size> T* begin(T (&array)[Size]) { return array; }
template <typename T, int Size> T* end(T (&array)[Size]) { return array + Size; }
C++03std::vector<T>
没有data()
成员,也就是说,你还需要获取第一个元素的地址。
以下对我有用:
const char *argv[]{"-l", nullptr};
execvp("ls", const_cast<char**>(argv));
由于它们是字符串文字,因此您不需要对它们进行空终止,但您仍然需要在数组末尾使用空字符串。