/*HASHING*/
unsigned char *do_hashing(unsigned char *buffer){
unsigned char outbuffer[20];
unsigned char output[20];
SHA1(buffer, strlen(buffer), outbuffer);
for (int i=0; i<20; i++) {
output[i]=outbuffer[i];
}
printf("The hash: ");
for (int i = 0; i < 20; i++) {
printf("%02x ", outbuffer[i]);
}
printf("\n");
return output;
}
/*HASHING*/
如果删除printf-function,为什么此函数会产生不同的输出(错误的输出)。例如:
./ftest
The hash: a1 2a 9c 6e 60 85 75 6c d8 cb c9 98 c9 42 76 a7 f4 8d be 73
The hash: a1 2a 9c 6e 60 85 75 6c d8 cb c9 98 c9 42 76 a7 f4 8d be 73
=with for-loop print
./ftest
The hash: 6c 08 40 00 00 00 00 00 0a 00 00 00 00 00 00 00 00 00 00 00
=without for-loop print
在这种情况下,我没有包含main-function或#includes,因为此函数内部发生错误。
答案 0 :(得分:7)
您正在返回指向局部变量unsigned char output[20];
的指针,
在函数结束导致未定义的行为后,该变量不存在。
答案 1 :(得分:1)
目前,您正在返回本地指针(放置在堆栈上)。这会导致未定义的行为。
如果你想这样做,请使用malloc()
函数在堆中分配内存。
unsigned char* output = malloc(20*sizeof(unsigned char));
但是不要忘记调用free()
释放分配的内存,否则会导致内存泄漏。