我在指针storeName
中存储了一个值,但是当我稍后尝试在程序中使用回调storeName
访问它时为空。我相信name
函数中的bz parent
是本地的。更改parent
功能不在我的掌控之中。在storeName
函数setName
中存储值的最佳方法是什么,因此storeName
可以在以后使用。
void parent()
{
uint8_t name[] = "James";
setName(name);
}
static uint8_t* storeName;
void setName(uint8_t* name)
{
storeName = name;
}
...代码中的其他一点
//*storeName is empty
(注意:上面的代码是一个简化版本,只是为了解释手头的问题)
答案 0 :(得分:3)
您正在传递本地变量的地址。 name
中的数组parent
在parent
退出时超出范围,因此指向该变量的指针现在指向未指定的内存位置,并且访问它会导致未定义的行为。
如果你这样定义name
:
uint8_t *name = "James";
然后它指向一个常量字符串,该字符串位于内存的只读部分,可以在函数外部安全地读取。这与前一个声明的不同之处在于常量字符串用于初始化数组,在这种情况下,您有一个指向实际常量的指针。