2011-11-02 299 views
0

如果我有这些代码:如何打印C++中指针指针的所有值?

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++,指针让我不舒服。

对于其它语言,我认为它应该是2维的阵列:阵列[A] [B]然后我可以循环这样的:

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

我认为类似的东西,除非焦炭**键有另一个含义?以及如何打印所有这些文件?

在此先感谢。

+0

这是一个绝对可怕的方法。请忘记所有人都可能通过啤酒告诉你关于指针的所有信息,并从学习惯用的现代C++开始。标准库有一个容器,它允许你以更可读的方式编写这些代码,此外还有*正确*和*安全*时尚。 –

+0

所以让我们来回顾一下......你将关键文件名存储在key_files显然是std :: string的数组中,并将这些文件的内容存储在char **中?不是说它不是一个有效的C++,但我强烈建议你保持一致并将你的密钥存储在std :: string的(static/dynamic/array/list)中,例如typedef vector KeyVec等。 – AlexK

+0

这是一个原始实现,我想读取num_keys,并把它们放在两个浮点数组中 – olidev

回答

2

在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

假设数组的类型为char **。你可以用

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

这里"%c"充当格式字符串告诉它期望从一个参数一个char做到这一点。