我正在尝试为hiredis构建一个matlab包装器。我从来没有做任何C编程,我总是遇到麻烦,因为我记不起基础知识了。因为我正在处理来自matlab的args,需要从mxArray对象转换为char*
,我需要使用函数
void * redisCommandArgv(redisContext * c,int argc,const char ** argv,const size_t * argvlen);
我理解了要点,但是让我感到困惑的是argv被定义为const char**
?为什么不只是char*
?在这种情况下,我不知道如何构建char**
。如果它是char*
我将循环遍历我的mxArrays并每次重新分配并添加到主char *。
编辑 - 我知道char*
是什么,我知道const是什么。我不记得或通过谷歌搜索找到的是如何构建一堆char*
不同长度的char**
。
答案 0 :(得分:2)
库中有一个错误,它应该是const char* const* argv
,因为该函数不会修改它。然后你可以毫不费力地传递char**
。
答案 1 :(得分:2)
我不记得或通过谷歌搜索找到的是如何构建一堆 不同长度的char *到char **
如果您提前知道字符串的内容,可以使用以下方法:
const char* my_string_array[] = {"hi", "world"};
答案 2 :(得分:1)
char **
是指向字符指针数组(即字符串)的指针。简单来说,你需要将一个字符串数组传递给redisCommandArgv
函数,而argc就是这个数组的大小。
const char*
关键字表示该函数不会对此指针指向的数据(即字符串)进行任何更改。 const char**
是一系列此类const char *
指针。
答案 3 :(得分:1)
您需要了解const char **
通常所指的内容。 const char *
通常指的是字符串,const char **
通常指的是字符串数组。当有问题的论证是argv
时,你可以指望它期待一个字符串数组。
理解char *
为什么是字符串的一种方法是字符串只是一个字符数组,在C字符串的情况下为null,这绝对是期待的。 const
部分只是保证它不会被相关函数修改,这是一件好事。