我有一个小程序,它为通过命令行传递的参数生成一个 SHA1 摘要,并将它们存储在一个指向 char 数组的指针数组中(我认为):
#include <stdio.h>
#include <openssl/sha.h>
int entries = 0; // Keep track of entries added
int main(int argc, char **argv)
{
// Allocate space for the digest array
unsigned char **mds = malloc(1);
// Add entries to the digest, one for each argument passed
for(int k = 1; k < argc; k++) {
mds[k - 1] = malloc(SHA_DIGEST_LENGTH);
SHA1(argv[k], strlen(argv[k]), mds[k - 1]);
entries++;
}
// Print each 20-byte digest
for(int j = 0; j < entries; j++) {
for(int i = 0; i < SHA_DIGEST_LENGTH; i++) { printf("%02x ", *(mds[j] + i)); }
printf("\n");
}
}
最初我有unsigned char **mds = calloc(argc, SHA_DIGEST_LENGTH);
并且每次我想添加另一个条目时我都会尝试使用realloc()
(如果我不知道以后会有多少条目)。
但后来我发现我不需要这样做,甚至根本不需要分配任何空间?只是一个字节,它仍然可以正常工作。这对我来说似乎不对。
我只是运气好还是什么?我错过了什么?