Question

Je suis en train de construire un tableau de caractères pour stocker la valeur de retour d'une fonction. Dans la fonction suivante les données sont stockées dans ***** valv **. Comment construire une variable extern pour accéder aux données?

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

Solution:

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

Merci à tous!

Était-ce utile?

La solution

char ***element[size];

est-ce pas exactement un tableau 3D, mais un ensemble d'éléments de size de pointeurs à à des pointeurs des pointeurs vers char.

Utiliser une quelconque des opérations suivantes:

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

Vous pouvez également transmettre simplement speficying e comme argument de votre fonction.

En plus de lecture, il apparaît que le paramètre est pas vraiment un tableau 3D, mais un pointeur vers un tableau de chaînes de style C. Remarque, la syntaxe peut être le même, l'intention est différente.

Dans ce cas, vous aurez besoin de faire deux choses:

  • Indiquez le nombre de chaînes que vous souhaitez stocker dans le tableau
  • Pour chaque chaîne
    • Allouer mémoire
    • copier les données de chaîne au tableau de char

Et enfin, vous passerez à l'adresse de ce tableau de chaînes à la fonction credis_lrange.

Autres conseils

Je ne ai trouvé un succès sur Google pour cela, mais il semble que la fonction cr_sendfandreceive attribue son rhnd-> reply.multibulk.bulks membre, de sorte que vous n'avez pas vraiment de le transmettre de nouveau (depuis que vous passé dans rhnd en premier lieu).

Si vous voulez copier, alors vous déclarer des éléments comme un char ** et de transmettre son adresse (ou utiliser des références), puis à l'intérieur de la méthode que vous cloner le membre vracs et aussi chaque chaîne dans le tableau (en une boucle).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top