2013-03-04 104 views
2

我想建立一个matlab包装到hiredis。我从来没有做过任何C编程,我总是遇到麻烦,因为我不记得基础知识。因为我正在处理来自matlab的参数,需要从mxArray对象转换为char*,所以我需要使用函数将const char **传递给函数 - 如何构建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**

+3

“我从来没有做任何C语言编程,我总是遇到麻烦,因为我不记得了基础” - 这是相当多的障碍,编写C代码... – 2013-03-04 00:51:24

回答

1

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

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

+0

不,的'常量'关键字表示数组只能c保持指向常量字符串的指针。但数组仍然可以修改。 – 2013-03-04 01:03:21

+0

是的,这就是我的意思,如果它含糊不清,让我重新说出来。 – Tuxdude 2013-03-04 01:08:17

1

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

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

2

库中存在一个错误,它应该是const char* const* argv,因为该函数不会修改它。然后你可以顺利通过char**

2

我不记得什么,或者通过google搜索找到的是如何构造不同长度的字符*一堆 成char **

这是一个方式,如果你事先知道你想要什么字符串是:

const char* my_string_array[] = {"hi", "world"}; 
相关问题