Pregunta

Estoy tratando de construir una matriz de caracteres para almacenar el valor de retorno de una función. En la siguiente función los datos se almacenan en ***** VALV **. ¿Cómo construir una variable externo para acceder a los datos?

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

Solución:

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

Gracias a todos!

¿Fue útil?

Solución

char ***element[size];

No es exactamente una matriz 3D, pero una serie de elementos size de punteros a punteros a punteros a char.

Utilice cualquiera de los siguientes:

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

Además, puede transmitirlo simplemente speficying e como el argumento de la función.

En la lectura adicional, parece que el parámetro no es realmente una matriz 3D, pero un puntero a una matriz de cadenas estilo C. Nota, la sintaxis puede ser el mismo, la intención es diferente.

En ese caso, tendrá que hacer dos cosas:

  • Especifica el número de cadenas que desea almacenar en el array
  • Para cada cuerda
    • Asignar memoria
    • Copiar datos de cadena a la matriz char

Y, por último, se le pasa en la dirección de esta matriz de cadenas a la función credis_lrange.

Otros consejos

Sólo he encontrado un hit en Google para esto, pero parece que la función cr_sendfandreceive asigna su rhnd-> reply.multibulk.bulks miembro, por lo que en realidad no tiene que pasar de nuevo (ya que se aprobaron en rhnd el primer lugar).

Si quiere copiarlo, entonces se declararía elementos como un char ** y pasar su dirección (o referencias de uso), y luego dentro del método que podría clonar el miembro de bultos y también cada cadena de la matriz (en un bucle).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top