Pergunta

Estou tentando criar uma matriz de char para armazenar o valor de retorno de uma função. Na função a seguir, os dados são armazenados em ***** valv **. Como criar uma variável externa para acessar os dados?

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;
}

Solução:

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; 
}

Obrigado a todos!

Foi útil?

Solução

char ***element[size];

Não é exatamente uma matriz 3D, mas uma variedade de size elementos de ponteiros a ponteiros para char.

Use qualquer um dos seguintes:

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

Além disso, você pode transmiti -lo simplesmente Speficing e como argumento para sua função.

Em uma leitura mais aprofundada, parece que o parâmetro não é realmente uma matriz 3D, mas um ponteiro para uma variedade de cordas no estilo C. Observe que a sintaxe pode ser a mesma, a intenção é diferente.

Nesse caso, você precisará fazer duas coisas:

  • Especifique o número de strings que você deseja armazenar na matriz
  • Para cada string
    • Alocar memória
    • Copiar dados da string para o char variedade

E, finalmente, você estará passando no endereço dessa variedade de cordas para o credis_lrange função.

Outras dicas

Eu só encontrei um golpe no Google para isso, mas parece que a função Cr_SendFandReceive aloca seu membro Rhnd-> Responder.multibulk.bulks, para que você não precise transmitir de volta (já que você passou o RHND em primeiro lugar ).

Se você deseja copiá -lo, declararia elementos como um char ** e passaria seu endereço (ou usaria referências) e, em seguida, dentro do método, clonaria o membro volumoso e também cada string na matriz (em um loop) .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top