我正在尝试构建一个 char 数组来存储函数的返回值。在以下函数中,数据存储在 *****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;
}
谢谢大家!
char ***element[size];
不完全是一个 3D 数组,而是一个由
size
元素组成的数组
使用以下任何一项:
char
此外,您可以通过简单地将
char e[ D1 ][ D2 ][ D3 ]; /* D1, D2, D3 are integral constants */
char *e[ D2 ][ D3 ];
char e[][ D2 ][ D3 ];
指定为函数的参数来传递它。
进一步阅读,该参数似乎并不是真正的 3D 数组,而是指向 C 风格字符串数组的指针。注意,语法可能相同,意图不同。在那种情况下,你需要做两件事:
指定要存储在数组中的字符串数
e
char
我只在谷歌上找到了一个关于这个的命中,但看起来 cr_sendfandreceive 函数分配了它的 rhnd->reply.multibulk.bulks 成员,所以你实际上不必将它传递回去(因为你在第一个传递给 rhnd地方)。
在 Arduino Studio 环境中,对于使用 PSRAM 的 ST 或 ESP32 等 MCU 编程,可以为 char 数组的 3D 多数组分配动态内存,大小为 255,如下所示: