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

Posted

技术标签:

【中文标题】如何将字符串数组转换为 Char * 数组 c++【英文标题】:How to Convert a String Array to a Char * Array c++ 【发布时间】:2013-09-29 20:04:21 【问题描述】:

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

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

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

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

【问题讨论】:

通过字符串数组,你的意思是像string myargs[5];,你想把它传递给execve吗? char *argv[] 实际上是char* 元素的数组。数组中的每个元素都指向一个char* 字符串。因此argv[0] 是一个可以打印/使用的char* 字符串。 @us2012 是的,字符串数组是指字符串数组,如字符串 myargs[5] 【参考方案1】:

您需要获取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();

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

    您需要创建一个合适的函数或函数对象来执行相同的转换,而不是使用 lambda 表达式。 您需要使用0,而不是使用nullptr。 在 C++03 中,std::string 不能保证是连续的,也就是说,您需要一个额外的辅助 std::vector&lt;char&gt; 来保存连续的字符序列。

    没有函数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++03 std::vector&lt;T&gt; 没有data() 成员,也就是说,您还需要获取第一个元素的地址。

【讨论】:

我是否需要包含任何库这些是我得到的错误'transform'不是'std'的成员'begin'不是'std'的成员错误:'end'是不是“std”警告的成员:lambda 表达式仅适用于 -std=c++0x 或 -std=gnu++0x [默认启用] 'nullptr' 未在此范围内声明 您需要使用 C++11 选项编译或使用函数对象而不是 lambda 表达式和 0 而不是 nullptr。当然,您还需要包含相关的标准标头(在本例中为 &lt;algorithm&gt;&lt;iterator&gt;&lt;string&gt;&lt;vector&gt;)。 我已经包含了vector和iostream并使用了命名空间std 即使在包含 之后,我仍然得到 'begin' 并且 'end' 不是 'std' 的成员 .. 我在 ubuntu 12.04 上使用 g++ @user2557844:我猜,你编译时没有-std=c++11-std=c++0x。在这种情况下,您可能需要定义 begin()end() 函数。【参考方案2】:

以下内容对我有用:

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

由于它们是字符串字面量,因此您不需要以空值终止它们,但您仍然需要在数组末尾使用空字符串。

【讨论】:

以上是关于如何将字符串数组转换为 Char * 数组 c++的主要内容,如果未能解决你的问题,请参考以下文章

将C的char数组转换为C++的字符串

c++ - 将 8 个位置的 int 数组转换为 char

C++中,如何讲CHAR数组转换成FLOAT型数据。

c++中如何将一个字符串转化成数组

C++,如何将char型数组转换为string类型数组。

C++怎么把string 转换为char型数组