C ++ Как использовать и пройти трехмерный массив CHAR?

StackOverflow https://stackoverflow.com/questions/2188559

Вопрос

Я пытаюсь построить массив Char для хранения возвращаемой стоимости функции. В следующей функции данные хранятся в ***** Valv **. Как создать внешнюю переменную для доступа к данным?

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

Решение:

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

Спасибо всем!

Это было полезно?

Решение

char ***element[size];

Не совсем 3D-массив, но массив size элементы указателей к указателям к указателям на char.

Используйте любое из следующих действий:

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

Кроме того, вы можете передать это просто Speficying e как аргумент к вашей функции.

На дальнейшем чтении кажется, что параметр на самом деле не является 3D-массивом, а указателем на массив строк C-стиля. Примечание, синтаксис может быть прежним, намерение отличается.

В этом случае вам нужно сделать две вещи:

  • Укажите количество строк, которые вы хотите хранить в массиве
  • Для каждой строки
    • Выделить память
    • Скопируйте строковые данные в char множество

И, наконец, вы будете проходить по адресу этого массива строк на credis_lrange функция.

Другие советы

Я нашел только один удар в Google для этого, но он выглядит как функция CR_SendFandreceive, выделяет свой RHND-> Ответить. Multibulk.Bulks участника, поэтому вам на самом деле не нужно передать его обратно (так как вы были переданы RHND в первую очередь. ).

Если вы хотите скопировать его, то вы будете объявлять элементы как символ ** и передавать его адрес (или использовать ссылки), а затем внутри метода вы бы клонируете элемент сыпучих материалов, а также каждую строку в массиве (в цикле) Отказ

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top