как вывести все значения указателей на указатели char в C ++? - PullRequest
0 голосов
/ 02 ноября 2011

Если у меня есть этот код:

unsigned char **keys;
int *num_keys;

int num_images = (int) key_files.size(); // the result is 10 for example

keys = new unsigned char *[num_images];
num_keys = new int[num_images];

/* Read all keys */
for (int i = 0; i < num_images; i++) {
    keys[i] = NULL;
    num_keys[i] = ReadKeyFile(key_files[i].c_str(), keys+i);
}

Я хотел бы перечитать, используя printf все элементы внутри ключей, как я могу это сделать?

Я только начинаю с C ++, указатели меня не устраивают.

Для другого языка, я думаю, что это должен быть массив из двух измерений: array [a] [b], тогда я могу зациклить его так:

for(int i=0; i<a; i++)
  for(int i=j; j<b; j++)
     printf(array[i][j]);

Я думаю, что-то в этом роде, разве у символов ** нет другого значения? и как я могу распечатать их все?

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 02 ноября 2011

В C ++ ваша программа может быть написана так:

#include <vector>
#include <iostream>

//...

const unsigned int num_images = key_file.size();

std::vector<unsigned char *> keys(num_images);
std::vector<int>         num_keys(num_images);

for (std::size_t i = 0; i != num_images; ++i)
{
  num_keys[i] = ReadKeyFile(key_files[i].c_str(), &keys[i]);

  // if the key is a null-terminated string:
  std::cout << "The key[" << i << "] is: '" << keys[i] << "'." << std::endl;

  // if the key is just a bunch of bytes, num_keys[i] in number:
  for (int j = 0; j != num_keys[i]; ++j)
  {
    std::cout << "key[" << i << "][" << j << "] = " << (unsigned int)(keys[i][j]) << std::endl;
  }
}

Я помещаю печать в ту же петлю, что и чтение; Вы также можете выполнить печать в отдельном цикле, если хотите.

0 голосов
/ 02 ноября 2011

Предполагая, что массив имеет тип char **.Вы можете сделать это с помощью

printf("%c", array[i][j])

Здесь "%c" действует как строка формата, сообщая ему ожидать символ из следующего аргумента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...