将const char **传递给函数 - 如何构建char **?

时间:2013-03-04 00:49:19

标签: c matlab redis

我正在尝试为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**

4 个答案:

答案 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部分只是保证它不会被相关函数修改,这是一件好事。