显示对本地函数引用的指针的值对我来说很有意义,在主函数中调用此本地函数后,指针引用的值已更改。
#include<stdio.h>
char *getAnotherString(){
char target[] = "Hi, ComplicatedPhenomenon";
char *ptrToTarget = target;
printf("ptrToTarget = %p\n", ptrToTarget);
printf("ptrToTarget = %s\n", ptrToTarget);
return ptrToTarget;
}
int main(){
char *ptrToTarget = NULL;
ptrToTarget = getAnotherString();
printf("ptrToTarget = %p\n", ptrToTarget);
printf("ptrToTarget = %s\n", ptrToTarget);
return 0;
}
我希望输出像
ptrToTarget = 0x7ffeeed1c950
ptrToTarget = Hi, ComplicatedPhenomenon
ptrToTarget = 0x7ffeeed1c950
ptrToTarget = Hi, ComplicatedPhenomenon
实际输出是
ptrToTarget = 0x7ffeeed1c950
ptrToTarget = Hi, ComplicatedPhenomenon
ptrToTarget = 0x7ffeeed1c950
ptrToTarget = Hi, ComplicatedP
答案 0 :(得分:3)
char target[] = "Hi, ComplicatedPhenomenon";
是 local 字符数组。这意味着一旦函数结束,它将变为无效,以后不应再使用它。这样做将调用未定义行为,这意味着输出可能是任何东西。
您可以通过使用malloc
或使用static
数组动态分配内存来修复它。
答案 1 :(得分:0)
我在c语言方面经验不足,但是我认为这与内存范围有关。 用char []分配的变量存储在堆栈中。 (我只是在谷歌上搜索它,实际上它似乎取决于编译器) 因此,在返回函数后,指针没有实际值。
但是,如果像这样将ptrToTarget定义为char *, char * ptrToTarget =“ ...”; 这将按预期工作。