2013-03-04 103 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"}; 
相關問題