C++ 如何使用和传递 3 维 char 数组?
-
25-09-2019 - |
题
我正在尝试构建一个字符数组来存储函数的返回值。在以下函数中,数据存储在 *****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 ];
另外,您可以通过简单地指定来传递它 e
作为函数的参数。
进一步阅读后发现,该参数实际上并不是一个 3D 数组,而是一个指向 C 风格字符串数组的指针。注意,语法可能相同,但意图不同。
在这种情况下,您需要做两件事:
- 指定要在数组中存储的字符串数量
- 对于每个字符串
- 分配内存
- 将字符串数据复制到
char
大批
最后,您将把这个字符串数组的地址传递给 credis_lrange
功能。
其他提示
我只发现在谷歌一重击这一点,但它看起来像cr_sendfandreceive功能分配其rhnd-> reply.multibulk.bulks成员,所以你实际上并没有将它传递回来(因为你是在通过rhnd第1名)。
如果要复制它,那么你将宣布元件作为char **,并通过它的地址(或使用的参考文献),然后该方法内,你会克隆散货构件并且还阵列中的每个串(在一个循环)。
不隶属于 StackOverflow