bywfssl 2017-08-02 09:09 采纳率: 100%
浏览 1271
已采纳

C语言面试真题:请问以下代码输出什么结果?

 #include <stdio.h>
#include <string.h>
char *RetMemory(void)
{
    char p[]="hello world";
    return p;
}
void test(void)
{
    char *str=NULL;
    str=RetMemory();
    printf(str);
}
void main()
{
    test();
}

答案是不能输出正确结果,但是为什么不能输出正确结果啊,怎么修改才能出现正确结果呢?

  • 写回答

7条回答 默认 最新

  • 战在春秋 2017-08-02 12:56
    关注

    怎么修改才能出现正确结果呢

    不能得到正确结果的原因是因为 p 是定义在栈上的局部变量,
    当函数结束时,p所占内存空间会被释放,此时p指向未知区域,因此不能得到正确的结果。

    楼主还没看到malloc,最简单可行的修改方法是:

     static char p[]="hello world";  //加上static修饰符,p为静态变量,其生存期为定义处到程序结束。
    

    关于如何返回函数的局部变量,强烈推荐这篇博客,讲得很详细。
    博客中也讲了malloc的用法。

    http://blog.csdn.net/jackystudio/article/details/11523353

    如果对您有帮助,请采纳答案好吗,谢谢!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • WildStark 2017-08-02 09:21
    关注

    输出应该是printf("%s",str);吧

    评论
  • hucongWh 2017-08-02 09:31
    关注

    输出应该是 *str , str是指针地址

    评论
  • 薄生 2017-08-02 09:54
    关注

    p是一个指针,是指向“hello world”藏身之地的一个指引,RetMemory()返回的是p,str又是一个指针,他指向了p指针的“藏身之地”,得到的不是hello world。不知道这样讲对不对,能不能理解。

    评论
  • 大米粥哥哥 2017-08-02 10:01
    关注

    楼上有位说的很对的

     char p[]="hello world";
    

    这个函数里的以上变量 执行完就被销毁了 所以说其实你返回的是一个莫名其表的指针
    你想修改可以传递参数 可以声明全局变量
    别在返回一个你在函数里声明的变量 那个变量其实在函数执行完以后就不存在了

    评论
  • vision泉 2017-08-02 13:33
    关注

    你不觉得打开电脑dev试一下比在这里问更快吗?学会自己动手找答案。

    评论
  • qq_39545013 2017-08-03 11:19
    关注

    其实一楼有点脱裤子放屁了,他这样malloc,没有free掉内存容易造成内存泄漏,简单说就是分配内存但是没有收回,导致可分配的内存减少。但是有一部分说的是对的
    ,就是char p[]="hello world"是在栈内存上分配的内存空间,函数执行完后内存就销毁了。但是也没必要用malloc去在堆上分配空间,其实char * p ="hello world";就可以了,因为“hello world"
    是一个字符串,会分配在常量区,这个区域的值在函数执行结束后是不会销毁的,一定程度上和全局变量一样。而p里面的地址就是这个不会销毁的常量区的地址,所以直接返回这个p就可以了,不知道这么说你明白不,还有一点就是需要在栈区分配个空间留给p这个变量去存放地址,函数结束后分派给p的内存会销毁,但是p内的地址已经返回了,也就是字符串的地址。

    评论
查看更多回答(6条)

报告相同问题?

悬赏问题

  • ¥15 MICE包多重插补后数据集汇总导出
  • ¥15 一道算法分析问题(关于3-MSAT)
  • ¥15 C++ FLUENT 化学反应速率 编写困难
  • ¥15 Python嵌套交叉验证
  • ¥15 linuxkit+elasticsearch
  • ¥15 兄得萌6.13do题😭😭大一小东西的work
  • ¥15 投不到原始数据,gdal投影代码
  • ¥20 卷积混响的代码帮写。。
  • ¥88 借助代码处理雷达影像,识别任意区域洪水前后的被淹没区域,并可视化展示。
  • ¥100 提问关于声学两个频率合成后主观听觉问题