Domanda

Sto cercando di costruire un array di caratteri per la memorizzazione del valore di ritorno di una funzione. Nella seguente funzione i dati vengono memorizzati in ***** valvo **. Come costruire una variabile extern per accedere ai dati?

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

Soluzione:

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

Grazie a tutti!

È stato utile?

Soluzione

char ***element[size];

Non è esattamente una matrice 3D, ma una serie di elementi size di puntatori-a-puntatori-a-puntatori a char.

Utilizzare una qualsiasi delle seguenti:

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

Inoltre, è possibile trasmetterla semplicemente speficying e come argomento per la funzione.

In ulteriore lettura, sembra che il parametro non è davvero una matrice 3D, ma un puntatore ad un array di stringhe in stile C. Nota, la sintassi può essere lo stesso, l'intento è diverso.

In questo caso, avrete bisogno di fare due cose:

  • Specificare il numero di stringhe che si desidera memorizzare nella matrice
  • Per ogni stringa
    • Allocare memoria
    • Copia dati stringa nella matrice char

E, infine, sarete passando l'indirizzo di questo array di stringhe alla funzione credis_lrange.

Altri suggerimenti

Ho trovato un solo colpo su Google per questo, ma sembra che la funzione cr_sendfandreceive alloca il suo rhnd-> reply.multibulk.bulks membro, quindi in realtà non è necessario passare di nuovo (dal momento che sono state approvate in rhnd primo luogo).

Se si desidera copiare, allora si avrebbe dichiarato elementi come un char ** e superare il suo indirizzo (o usare i riferimenti), e poi dentro il metodo che si sarebbe clonare il membro rinfuse e anche ogni stringa nella matrice (in un loop).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top