c - 为什么我的 char * 返回不同的值?

标签 c arrays pointers buffer

我有一个如下所示的函数:

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/

相关文章:

指针递增的 C 运算符优先级

c++ - 具有 2 字节(或更多)原子字节顺序的架构

c - 在 struct 中使用 struct 关键字

javascript:对象数组中的对象数组

c - fgets() 函数不起作用

c - 如何@synthesize C 风格的指针数组?

c - 当我关闭命令提示符时,我的 C 基本交易程序不会存储任何修改

通过使用指针移动 +1 来加密和解密字符串

java - java 中奇怪的数组行为。具有单个 int 的数组的行为与该 int 不在数组中的同一程序的行为不同

python - 将 JSON 文档展平为单行