質問

関数の戻り値を格納するための char 配列を構築しようとしています。次の関数では、データは *****valv** に保存されます。データにアクセスするための外部変数を構築するにはどうすればよいですか?

int credis_lrange(REDIS rhnd, const char *key, 
                   int start, int end, char ***valv) 
{
  int rc;

  if ((rc = cr_sendfandreceive(rhnd, CR_MULTIBULK, "LRANGE %s %d %d\r\n", 
                                key, start, end)) == 0) 
  {
    *valv = rhnd->reply.multibulk.bulks;
    rc = rhnd->reply.multibulk.len;
  }

  return rc;
}

解決:

char **elements;

int size = credis_lrange(this->redis,"object_2",600,603,&elements);

for (int i=0; i<size;i++) {
    cout << "element: " << elements[i] << endl; 
}

みんなありがとう!

役に立ちましたか?

解決

char ***element[size];

正確には 3D 配列ではありませんが、 size ポインターからポインターへのポインターの要素 char.

次のいずれかを使用します。

char e[ D1 ][ D2 ][ D3 ]; /* D1, D2, D3 are integral constants */
char *e[ D2 ][ D3 ];
char e[][ D2 ][ D3 ];

また、単に指定するだけでそれを渡すこともできます e 関数の引数として。

さらに詳しく読むと、パラメータは実際には 3D 配列ではなく、C スタイルの文字列の配列へのポインタであることがわかります。構文は同じでも、意図が異なる場合があることに注意してください。

その場合は、次の 2 つのことを行う必要があります。

  • 配列に格納する文字列の数を指定します
  • 文字列ごとに
    • メモリの割り当て
    • 文字列データを char 配列

そして最後に、この文字列配列のアドレスを credis_lrange 関数。

他のヒント

私はこれだけのためにGoogleで1本のヒットを見つけましたが、あなたが実際にあなたがでrhndを渡されたので、(戻ってそれを渡す必要はありませんのでcr_sendfandreceive関数は、そのrhnd-> reply.multibulk.bulksメンバーを割り振るように見えます最初の場所)。

あなたはそれをコピーしたい場合は、

は、あなたがに(** charとしての要素を宣言し、そのアドレス(または使用参照)を渡し、そのメソッド内で、あなたはバルク材と、アレイ内の各文字列のクローンを作成しますでしょうループ)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top