#include
char *
GetStr(void){
char p[]="hello world";
return 0;
}
int
main(void){
char *str =NULL;
str=GetStr();
printf("%s\n",str);
return 0;
}
#include
char *
GetStr(void){
char p[]="hello world";
return 0;
}
int
main(void){
char *str =NULL;
str=GetStr();
printf("%s\n",str);
return 0;
}
第一个问题:
函数返回值是不对的,
char *GetStr(void); 这是你的函数原型。返回类型是char *指针,即所指向的地址空间。而你的函数返回类型却是int型。如:
char *GetStr(void){
char p[]="hello world";
return 0; //肯定是为0 (NULL 其值也是0,使用#define 宏定义的)
}
问题二: 变量的生命周期以及作用域问题。
char *GetStr(void){
char p[]="hello world"; //p是一个指针,其作用域在该GetStr函数范围内,该函数运行结束,会自动释放该指针p所占的空间(指针本身也占用地址的);
return 0;
}
基于以上2个原因;main中调用的结果是:null
其解决方案很多,比如下面:
char *GetStr(void){
char p[]="hello world";
char *pTr = (char*)calloc(strlen(p)+1,sizeof(char));
strncpy(pTr,p,strlen(p));
return pTr;
}
int main(){
char *str =NULL;
str=GetStr();
printf("%s\n",str);
if(str)
{
free(str);
str = NULL;
}
return 0;
}
若有帮助,还望点击“采纳!!!”谢谢。。。