2

我正在尝试为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 和 realloc 并添加到主 char*。

编辑-我知道是什么char*,我知道 const 是什么。我不记得或通过谷歌搜索找到的是如何构建一堆char*不同长度的char**.

4

4 回答 4

2

库中有一个错误,应该是const char* const* argv因为函数没有修改它。然后你可以char**毫无困难地通过a。

于 2013-03-04T01:01:53.920 回答
2

我不记得或通过谷歌搜索找到的是如何将一堆不同长度的 char* 构造成 char**

如果您提前知道您想要的字符串是什么,这是一种方法:

const char* my_string_array[] = {"hi", "world"};
于 2013-03-04T01:32:36.873 回答
1

char **是一个指向字符指针(即字符串)数组的指针。简单来说,您需要将一个字符串数组传递给redisCommandArgv函数,而 argc 是该数组的大小。

const char*关键字表示该函数不会对该指针指向的数据(即字符串)进行任何更改。const char**是此类const char *指针的数组。

于 2013-03-04T00:53:02.177 回答
1

您需要了解const char ** 通常指的是什么。const char * 通常是指一个字符串,const char ** 通常是指一个字符串数组。当有问题的参数是argv你可以指望它期待一个字符串数组。

理解为什么char *是字符串的一种方法是,字符串只是一个字符数组,在 C 字符串的情况下以 null 结尾,这绝对是预期的。该const部分只是保证它不会被相关功能修改,这是一件好事。

于 2013-03-04T00:53:49.377 回答