BYMSCC 2018-11-15 06:34 采纳率: 0%
浏览 716

请教一个c语言指针和编译方面的问题,见下图。请问最后输出结果为什么会是NULL指针??

#include

char *
GetStr(void){
char p[]="hello world";
return 0;
}

int
main(void){
char *str =NULL;
str=GetStr();
printf("%s\n",str);
return 0;
}

图片说明

  • 写回答

3条回答 默认 最新

  • 内核之道 PostgreSQL领域优质创作者 2018-11-15 06:51
    关注
    第一个问题:
    函数返回值是不对的,
    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;
    }
    

    若有帮助,还望点击“采纳!!!”谢谢。。。

    评论

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?