函数返回局部变量,出错?

想要在一个给定字符串,从下标start开始,取出四个字符,构成一个新的字符串。看着简单,但是自己编写,一直出错。

char*getSubstring(char s[],int start){

  1.     char sub[5];
  2.     for(int i=0;i<4;i++,start++)
  3.         sub[i]=s[start];
  4.     sub[4]='\0';
  5.     returnsub;
  6. }
 
int main()
{

static char *pc;
char s[10]="i love u";
pc=getSubstring(s,0);

puts(pc);

return 0;

}

结果如下:
请输入图片描述

 

问了同学,恍然大悟。sub[5]定义在函数内,是局部变量,当调用结束后,该变量就被释放掉了。当我返回该指针时,主调函数试图通过该指针,读取局部变量的值,就出现了上图的错误。

怎么改正?

char sub[5] 改成 static char sub[5]

原因是添加static后,局部变量sub[5]存储在静态存贮区(也就是全局数据区),在函数调用结束后,它的值仍然存在。通常,局部变量都是存放在栈区,该区域连续,由编译器自动分配和释放。加上static,局部变量就存放在全局区里,就不会再调用结束后丢失了。

 

posted @ 2014-06-11 17:39  snail's dream  阅读(158)  评论(0编辑  收藏  举报