我正在指针storeName
中存储一个值,但当我稍后尝试在程序中使用回调storeName
访问它时,该值为空。我相信它是bzname
在parent
函数是局部的。改变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/