//-------------------------------------------------------------分析------------------------------------------------------------------
char *fun()
{char s[10];
strcpy ( s , "abc " );
return s;
}
-----------
这个函数的问题就是所谓的返回 指向栈地址的指针
char s[10];局部变量是在函数体内声明的, 所以在退出函数时, 会自动销毁.返回指针s指向的是栈地址, 在函数退出后, 就成为无效指针.
//--------------------------------------------------------------------------------------------------------------------------------------
其实就是要返回一个有效的指针,尾部变量退出后就无效了。
那么一个函数如何返回一个字符串呢?
解决方法如下:
1.
char *fun()
{
static char s[10]; //
strcpy ( s , "abc " );
return s;
}
2.
使用分配的内存,地址是有效的
char *fun()
{
char* s = (char*)malloc(100, sizeof(char*) );
if (s)
strcpy ( s , "abc " );
return s;
} //那么在哪儿将返回的地址free掉
3. 也可以用全局变量
4.
将地址由入参传入
char* fun(char*s)
{
if (s)
strcpy(s, "abc ");
return s;
}
这种方式调用都要注意给s分配的大小是足够。
可以这样:
char* fun(char*s, int len)
{
if (s)
{
strncpy(s, "abc ", len-1);
s[len-1] = 0;
}
return s;
}