我正在指针storeName中存储一个值,但当我稍后尝试在程序中使用回调storeName访问它时,该值为空。我相信它是bznameparent函数是局部的。改变parent功能不在我的控制范围内。什么是在storeName函数中存储值的最佳方法,因此setName可以在以后使用。

void parent()
{
   uint8_t name[] = "James";
   setName(name);
}

static uint8_t* storeName;

void setName(uint8_t* name)
{
   storeName = name;
}

... 在代码的另一点上
//*storeName is empty

(注:以上代码是一个简化版本,只是为了解释手头的问题)

最佳答案

您传递的是一个局部变量的地址。name中的数组parent超出了parent退出的范围,因此指向该变量的指针现在指向一个未指定的内存位置,访问它会导致未定义的行为。
如果您这样定义name

uint8_t *name = "James";

然后它指向一个常量字符串,该字符串位于内存的只读部分中,可以在函数外部安全地读取。这与前面的声明不同,因为常量字符串用于初始化数组,在这种情况下,您有一个指向实际常量的指针。

关于c - 存储指针值以备后用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37461951/

10-10 15:02