- 论坛徽章:
- 0
|
一直有个很困惑的问题,花了两天时间,也不知道搞明白没有,发个贴子请教了各位
#include<stdio.h>
static char *msg[]={"one","tow","three","four","five"};
char *getmsg(int);
int main(void)
{
printf("%s %s\n",getmsg(0),getmsg(1));
return 0;
}
char *getmsg(int i)
{
char strbuf[20];
strcpy(strbuf,msg);
return strbuf;
}
为什么这样我得不到正确的值,而把这个getmsg函数换成这样
char *getmsg(int i)
{
char *strbuf;
strbuf = msg;
return strbuf;
}
却可以得到正确的结果,想了很久觉得就是跟所谓堆栈有关系,第一种写法char strbuf[20];局部变量,空间分配在函数的栈上,返回的时候是把这个存储空间的首地址给了调用函数,随着函数的退出,栈销毁,strbuf中的内容也就不得而知了;而采用第二种写法是相当于把msg的地址传回了调用函数,所以就能取到值。因此我擅作主张得出一个结论就是如果是返回char *的函数就应该在函数采用char *p;return p的方法,而不能用char str[];return str的方法,不知道这样的理解对不对,往给位大大不吝赐教,拜谢! |
|