繁体   English   中英

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

[英]How to Convert a String Array to a Char * Array c++

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

execve(char *filename, char *argv[], char *envp[])

目前我的argv[]是一个字符串数组。 我想把它转换成一个char* array这样我就可以把它传递给这个函数。

我环顾四周,发现了许多将字符串转换为char数组的方法,但是如何将字符串数组转换为 char 数组的数组,我想这是正确的术语 有什么帮助吗?

您需要获取std::string数据的地址。 请注意,这是空值终止,即这些不是必需的,你需要确保所有的字符串是空终止。 此外,作为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 编译时,需要进行一些更改:

  1. 您需要创建一个合适的函数或函数对象来执行相同的转换,而不是使用 lambda 表达式。
  2. 您需要使用0而不是使用nullptr
  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; }
  5. C++03 std::vector<T>没有data()成员,即,您还需要获取第一个元素的地址。

以下对我有用:

const char *argv[]{"-l", nullptr};
execvp("ls", const_cast<char**>(argv));

由于它们是字符串文字,因此您不需要以空字符结尾,但您仍然需要数组末尾的空字符串。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM