我试图建立一个字符数组来存储一个函数的返回值。在下面的函数中,数据存储在***valv中。如何建立一个外部变量来访问数据?
int credis_lrange(REDIS rhnd, const char *key,
int start, int end, char ***valv)
{
int rc;
if ((rc = cr_sendfandreceive(rhnd, CR_MULTIBULK, "LRANGE %s %d %d\r\n",
key, start, end)) == 0)
{
*valv = rhnd->reply.multibulk.bulks;
rc = rhnd->reply.multibulk.len;
}
return rc;
}
- 解决方案:**
char **elements;
int size = credis_lrange(this->redis,"object_2",600,603,&elements);
for (int i=0; i<size;i++) {
cout << "element: " << elements[i] << endl;
}
感谢所有人!
3条答案
按热度按时间elcex8rz1#
不完全是一个三维数组,而是
size
元素的数组,这些元素的指针指向char
。请使用以下任意一种方法:
此外,您可以通过指定
e
作为函数的参数来传递它。进一步阅读后,发现该参数实际上不是一个3D数组,而是一个指向C样式字符串数组的指针。注意,语法可能相同,但意图不同。
在这种情况下,您需要做两件事:
char
数组最后,将这个字符串数组的地址传递给
credis_lrange
函数。3pvhb19x2#
我在Google上只找到了一个匹配项,但看起来cr_sendfandreceive函数分配了它的rhnd-〉reply.multibulk.bulks成员,所以实际上不必将它传递回去(因为首先向您传递了rhnd)。
如果你想复制它,那么你可以将元素声明为char**并传递它的地址(或者使用引用),然后在方法内部你可以克隆bulks成员以及数组中的每个字符串(在循环中)。
fsi0uk1n3#
在Arduino Studio环境中,对于使用PSRAM的ST或ESP 32等MCU编程,可以为char数组的3D多数组(大小为255)分配动态内存,如下所示:
对于X86/ X64体系结构,可以如下声明大小为255的字符数组的3D多数组: