gpt4 book ai didi

c++ - 从函数生成一个 char* 指针数组

转载 作者:太空狗 更新时间:2023-10-29 20:45:36 24 4
gpt4 key购买 nike

我有一个 C++ 函数,我必须向其传递 char* arguments[]。该函数的原型(prototype)如下:void somefunc(char* arguments[])

为了将上面的数组传递给这个函数,我从另一个函数生成这个数组,它可以返回这个 char* array 输出,这看起来有点像这样。

char** genArgs(int numOfArgs,...)
{
va_list argList;
char** toRet = new char*[numOfArgs];
va_start (arguments, numOfArgs);
for(int cnt = 0; cnt < numOfArgs ; ++cnt)
toRet[cnt] = va_arg(argList, char*);

va_end(arguments);
}

我对如何正确编写上述函数感到困惑,因为我会将输入传递给类似这样的函数:genArgs(3, a.c_str(), b.c_str(), c.c_str ())genArgs(2, a.c_str(), b.c_str())
如何在不使用 char** 的情况下生成上述 char* 数组(因为在从函数返回之前必须删除它以避免内存泄漏)。

最佳答案

从您对 genArgs 的声明来看,似乎每当您调用 genArgs 时,您就知道要传递多少个参数。这样对吗?如果是这样(并且如果您使用的是 C++11),那么您可以在调用函数中使用 std::array。所以不是这个:

char** arglist = genArgs (4, "MyArg1", mYaRG2", "LastArg", 0) ;
somefunc (arglist) ;
delete[] arglist ;

你可以这样做:

#include <array>
std::array<char*, 4> arglist { "MyArg1", mYaRG2", "LastArg", 0 } ;
somefunc (&arglist[0]) ;

但是第一个解决方案确实没有错,除非你是 C++ 苦行僧。 (但是,您确实需要 genArgs 中的 return toRet ; 语句!)

关于c++ - 从函数生成一个 char* 指针数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10431541/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com