我有一个如下所示的函数:
char *function1(){
//SOME CODE HERE
char result[16];
char *ptr = result;
return ptr;
}
所以它的作用是计算一些值(128 位),将其存储在字符缓冲区中,然后返回指向缓冲区的指针。
我使用以下命令打印 function1
中的缓冲区:
for (i = 0; i < 16; i++)
printf("%02X ", result[i]);
printf("\n");
结果是一个 128 位值并被打印出来。
现在在另一个函数中我有以下代码
char *ptr_to_result = function1();
我再次使用这段代码打印它:
for (i = 0; i < 16; i++)
printf("%02X ", ptr_to_result[i]);
printf("\n");
result2 是打印出来的 128 位值。
由于某种原因结果!= 结果2,我不明白为什么。
最佳答案
缓冲区结果
将从函数function1()
返回时消失,并且访问消失的缓冲区(通过返回的指针)会调用未定义的行为 .
将 char result[16];
更改为 static char result[16];
将防止 result
消失,并应使其正常工作,除非您在多线程或中断处理程序中使用该函数。 (此更改将使函数不可重入)
关于c - 为什么我的 char * 返回不同的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35639593/