コマンドライン経由で渡された引数の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()
いました(後でエントリの数がわからない場合)。
しかし、それを行う必要がなく、スペースをまったく割り当てる必要さえないことがわかりましたか? ほんの 1 バイトで、それでも問題なく動作します。それは私には正しくないようです。
私は運が良かっただけですか?私は何が欠けていますか?