如何将字符串数组转换为Char*数组c ++

Has*_*lil 2 c c++ arrays string

所以我想将参数传递给以下函数

execve(char *filename, char *argv[], char *envp[])
Run Code Online (Sandbox Code Playgroud)

目前我argv[]是一个字符串数组.我想将它转换成一个,char* array所以我可以将它传递给这个函数.

我环顾四周,找到了很多方法将字符串转换为char数组,但如何将字符串数组转换为char数组的数组我想是正确的术语任何帮助?

Die*_*ühl 5

您需要获取std::strings 内的数据地址.请注意,这些都不会是空值终止的要求,即,你需要确保所有的字符串是空终止.另外,传递的数组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();
Run Code Online (Sandbox Code Playgroud)

使用C++ 03进行编译时,需要进行一些更改:

  1. 您需要创建一个执行相同转换的合适函数或函数对象,而不是使用lambda表达式.
  2. 而不是使用nullptr你需要使用0.
  3. 在C++ 03 std::string中不保证是连续的,即你需要一个额外的辅助std::vector<char>来保存连续的字符序列.
  4. 没有函数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; }
    
    Run Code Online (Sandbox Code Playgroud)
  5. C++ 03 std::vector<T>没有data()成员,即你还需要获取第一个元素的地址.