2

私は、hiredis への matlab ラッパーを構築しようとしています。私は C プログラミングをまったくやったことがなく、基本を思い出せないためにいつもトラブルに遭遇します。mxArray オブジェクトから に変換する必要がある matlab からの引数を処理している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

4 に答える 4

2

ライブラリにバグがありますconst char* const* argv。関数がライブラリを変更しないためです。そしてchar**難なく合格できました。

于 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 に答える