Frage

Ich versuche zum Speichern des Rückgabewertes einer Funktion eines char-Array zu bauen. In der folgenden Funktion werden die Daten in ***** valv gespeichert **. Wie eine externe Variable bauen auf die Daten zugreifen?

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

Lösung:

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

Danke an alle!

War es hilfreich?

Lösung

char ***element[size];

Ist nicht gerade ein 3D-Array, aber eine Reihe von size Elementen von Zeigern-to-Zeiger-to-Zeiger auf char.

Verwenden Sie eine der folgenden Möglichkeiten:

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

Sie können aber auch durch einfaches speficying e als Argument an die Funktion weitergeben.

Bei der weiteren Lektüre scheint es, dass der Parameter nicht wirklich ein 3D-Array ist, sondern ein Zeiger auf ein Array von C-Strings. Beachten Sie, die Syntax kann das gleiche sein, die Absicht ist anders.

In diesem Fall müssen Sie zwei Dinge tun:

  • Geben Sie die Anzahl der Strings Sie speichern möchten im Array
  • Für jede Zeichenfolge
    • Speicher zuweisen
    • Kopieren String-Daten an die char Array

Und schließlich werden Sie in der Adresse dieses Array von Strings auf die credis_lrange Funktion werden übergeben.

Andere Tipps

Ich fand nur einen Treffer bei Google für diese, aber es sieht aus wie die cr_sendfandreceive Funktion seiner rhnd- zuordnet> reply.multibulk.bulks Mitglied, so dass man eigentlich nicht, es wieder passieren müssen (da Sie Rhnd weitergegeben wurden in die erste Stelle).

Wenn Sie es kopieren wollen, dann würden Sie Elemente als char deklarieren ** und übergeben Sie die Adresse (oder Verwendung Referenzen) und dann innerhalb der Methode würden Sie das bulks Mitglied klonen und auch jede Zeichenfolge in dem Array (in eine Schleife).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top