函数返回局部变量,出错?
想要在一个给定字符串,从下标start开始,取出四个字符,构成一个新的字符串。看着简单,但是自己编写,一直出错。
char*getSubstring(char s[],int start){
- char sub[5];
- for(int i=0;i<4;i++,start++)
- sub[i]=s[start];
- sub[4]='\0';
- returnsub;
- }
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,局部变量就存放在全局区里,就不会再调用结束后丢失了。
和阴影同行,看到光明