C 如何显示指针引用的值?

C 如何显示指针引用的值?,c,pointers,C,Pointers,显示本地函数中指针引用的值对我有意义,在主函数中调用此本地函数,指针引用的值发生更改 #包括 char*getAnotherString(){ char target[]=“嗨,复杂的现象”; char*ptrToTarget=target; printf(“ptrToTarget=%p\n”,ptrToTarget); printf(“ptrToTarget=%s\n”,ptrToTarget); 返回目标; } int main(){ char*ptrToTarget=NULL; ptrTo

显示本地函数中指针引用的值对我有意义,在主函数中调用此本地函数,指针引用的值发生更改

#包括
char*getAnotherString(){
char target[]=“嗨,复杂的现象”;
char*ptrToTarget=target;
printf(“ptrToTarget=%p\n”,ptrToTarget);
printf(“ptrToTarget=%s\n”,ptrToTarget);
返回目标;
}
int main(){
char*ptrToTarget=NULL;
ptrToTarget=getAnotherString();
printf(“ptrToTarget=%p\n”,ptrToTarget);
printf(“ptrToTarget=%s\n”,ptrToTarget);
返回0;
}
我希望输出像这样

ptrToTarget=0x7ffeed1c950
ptrToTarget=Hi,复杂现象
ptrToTarget=0x7ffeed1c950
ptrToTarget=Hi,复杂现象
实际输出为

ptrToTarget=0x7ffeed1c950
ptrToTarget=Hi,复杂现象
ptrToTarget=0x7ffeed1c950
ptrToTarget=Hi,dp
是一个本地字符数组。这意味着一旦函数结束,它就无效,以后不应该再使用它。这样做将调用未定义的行为,这意味着输出可以是任何内容


您可以通过使用
malloc
动态分配内存或使用
静态数组来修复它。

我对c语言没有太多经验,但我认为这与内存范围有关。 使用char[]分配的变量存储在堆栈上。 (我只是快速地在谷歌上搜索,它实际上似乎依赖于编译器) 所以在返回函数后,指针并没有实际值

但是如果你像这样把ptrToTarget定义为char*, char*ptrToTarget=“…”;
这将如您所期望的那样工作。

是的,正如您所说,当我像这样直接初始化指针时,
char*ptrToTarget=“Hi,complementdphenomenon”
,但是为什么这个函数返回了一个带有实数值的指针,当函数返回时,不应该销毁
嗨,复杂的现象
,函数返回的指针中真正包含的只是一个垃圾值。函数返回时它已被销毁,因为它存储在堆栈中。如果您声明char*str=“…”;然后str被存储在一个全局范围内,比如文本区域或其他地方。
char target[] = "Hi, ComplicatedPhenomenon";