我正在使用 X-Code 3.2.6(64 位)编译应用程序。该应用程序正在针对 10.5 SDK 和 32 位英特尔架构进行编译。
我已将字符数组声明为:
char iptmp[ARRAY_SIZE];
所以我这样调用一个函数:
myfunc(&iptmp);
声明 myfunc 的地方:
void myfunc(char** value)
{
...
};
目的是使用 strncpy 将另一个字符串的内容加载到字符数组中。当您看到下面的内容时,您可能会理解为什么我不简单地执行以下操作:strcpy(iptmp, myfunc());但问题是:
Value of iptmp prior to function call: 0xb0206f5a
Value of *value in function: 0xffffb020
我已经尝试了各种方法来解决这个问题,但似乎唯一坚持的是接收一个 UINT32 值并进行转换:
myfunc((UINT32) &iptmp);
void myfunc(UINT32 value)
{
char* target = (char*) value;
...
}
这对我的代码造成了严重破坏。指针值是怎么回事?
最佳答案
这里发生的是 iptmp
是内存中的一个位置。如果你写 iptmp
你会得到数组的地址。但是,如果您编写 &iptmp
,您将也得到它的地址。但是,您假设您将获得一个指向数组指针的指针。
处理这个问题的最好方法就是:
void myfunc(char * value)
{
...
};
指针 value
将指向数组,您可以随意修改它。
关于Objective-C 指针值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5662279/