18032|72

135

帖子

0

TA的资源

纯净的硅(初级)

楼主
 

笔试的一个题,挂了!回家的路上突然想到答案,呜呼哀哉~~请各路诸侯给出高见 [复制链接]

问题:执行下列代码会有什么结果

#include

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

void main()
{
        char *p_ch = NULL;
        p_ch = fun();
        printf(p_ch);
}

一眼望去,奋笔疾书,答曰:打印“hello, world”

结果~~~~~~~~~

[ 本帖最后由 bill_shi68 于 2012-8-23 01:03 编辑 ]
此帖出自编程基础论坛

最新回复

学习了  详情 回复 发表于 2012-9-27 08:43
点赞 关注
 

回复
举报

135

帖子

0

TA的资源

纯净的硅(初级)

沙发
 
请各路诸侯给出高见~~~~~
此帖出自编程基础论坛
 
 
 

回复

1万

帖子

16

TA的资源

版主

板凳
 

对啊,本来就是打印那个字符串么???

此帖出自编程基础论坛
 
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
 
 

回复

888

帖子

3

TA的资源

五彩晶圆(初级)

4
 
      刚才把代码拷贝过去做了一个测试,结果这里的printf是什么都没有打印,上面的p_ch = fun();不管写还是不写这行函数都是没有效果,printf(地址)这里是没有打印的,高手可以对这个分析一下。


此帖出自编程基础论坛
 
个人签名邮箱:ternence.hsu@foxmail.com
 
 

回复

1万

帖子

16

TA的资源

版主

5
 

这怎么可能?应打印一串字符的

此帖出自编程基础论坛
 
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
 
 

回复

7815

帖子

56

TA的资源

裸片初长成(中级)

6
 
,,,晕,
这个题目你怎么中招了,而且还挺多人中招来着。

不打印出一堆稀奇古怪的乱码就不错了。

一句话说明白:
不要返回本地局部地址。
此帖出自编程基础论坛
 
个人签名

强者为尊,弱者,死无葬身之地

 
 

回复

7815

帖子

56

TA的资源

裸片初长成(中级)

7
 

回复 5楼 ddllxxrr 的帖子

你啊,失蹄了
此帖出自编程基础论坛
 
个人签名

强者为尊,弱者,死无葬身之地

 
 

回复

7815

帖子

56

TA的资源

裸片初长成(中级)

8
 

回复 4楼 37°男人 的帖子

gcc就是好,直接把错误都说出来了,额,要是狗屎的vc,他真能编译过去的
此帖出自编程基础论坛
 
个人签名

强者为尊,弱者,死无葬身之地

 
 

回复

7815

帖子

56

TA的资源

裸片初长成(中级)

9
 
两个错误
1。前面说了;
2.开什么玩笑,你这个printf是神马玩意.......参数有这么传么.....

printf("",para1,para2,,,,);
结果你这玩意就成了那个带有格式控制符的 字符地址.....

我的天,那会乱成什么样子,,,难以想象。
此帖出自编程基础论坛
 
个人签名

强者为尊,弱者,死无葬身之地

 
 

回复

7815

帖子

56

TA的资源

裸片初长成(中级)

10
 
总结一下,仔细看一下printf的接口
它的第一个形参是一个 字符串地址

这个字符串带着 格式控制符 和 输出信息。

其二,不要返回本地局部地址,原因很简单,函数返回时,那个地址早就被销毁了。
简单说,成了个野指针,你不晓得他到底指向了哪里。

所以,啥都不输出很正常。
此帖出自编程基础论坛
 
个人签名

强者为尊,弱者,死无葬身之地

 
 

回复

1万

帖子

16

TA的资源

版主

11
 

本人也做了下,真是什么也打不出来

唉!看来这次挂了
此帖出自编程基础论坛
 
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
 
 

回复

1万

帖子

16

TA的资源

版主

12
 

辛昕分析的对

我改了下程序,把数组变为全局变量.这下好了
#include
#include
void init_serialcomm(void);
char p[] = "hello, world";
char *fun(void)
{
        //char p[] = "hello, world";
        return p;
}

void main()
{
        
        char *p_ch = NULL;
        p_ch = fun();
                init_serialcomm();
        while(1)
                {
                printf(p_ch);
                //printf("hello.world");
                }

}

void init_serialcomm(void)
{
    SCON  = 0x50;          /* SCON: mode 1, 8-bit UART, enable rcvr      */
    TMOD |= 0x20;               /* TMOD: timer 1, mode 2, 8-bit reload        */
    TH1   = 221;                /* TH1:  reload value for 1200 baud @ 16MHz   */
    TR1   = 1;                  /* TR1:  timer 1 run                          */
    TI    = 1;                  /* TI:   set TI to send first char of UART    */
   // TI=1;
}


上图:有图有真象



[ 本帖最后由 ddllxxrr 于 2012-8-23 11:55 编辑 ]
此帖出自编程基础论坛
 
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
 
 

回复

471

帖子

0

TA的资源

一粒金砂(高级)

13
 
用cfree试了下,用printf(“%s”,平、p_ch)和printf(p_ch);查看内存发现都是打印的数组的首地址。
此帖出自编程基础论坛
 
 
 

回复

135

帖子

0

TA的资源

纯净的硅(初级)

14
 
晚睡,早起,疾走,晒太阳,晕晕乎乎的,答题时预感有陷阱的,哎~~~

笔试题可能是考查局部变量生命周期吧,被调函数返回时函数内申请的局部地址已释放,那个地址指向的内容也是未知。结果应该是打印乱码或是什么都不打印吧(套用K&R书中的话:“取决于具体的实现”)。

至于 printf(p_ch); 这个语句,应该是OK的,至少不是考查的部分。
此帖出自编程基础论坛
 
 
 

回复

2453

帖子

19

TA的资源

五彩晶圆(中级)

15
 
虽然返回了局部变量的地址,但是在使用指针前没有修改该地址对应的内存值。
此帖出自编程基础论坛
 
 
 

回复

135

帖子

0

TA的资源

纯净的硅(初级)

16
 

回复 15楼 zca123 的帖子

在使用指针前该地址对应的内存值可能会修改,也可能不会,套用K&R书中的话:“取决于具体的实现”

那应该这样答吧:打印“hello, world”,打印乱码或是什么都不打印
此帖出自编程基础论坛
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

17
 
fun里面的在返回前就释放掉了啊,肯定打印NULL啊;
此帖出自编程基础论坛
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(中级)

18
 
试了一下,把char p[] = "hello, world";
改成char *p = "hello, world";
就没问题了。
此帖出自编程基础论坛
 
 
 

回复

7815

帖子

56

TA的资源

裸片初长成(中级)

19
 

回复 18楼 ahuzhangbo 的帖子

哈哈,亲,你这个蛮有点意思.......

我想了想,应该是这样的。。
大家说说为啥吧?
此帖出自编程基础论坛
 
个人签名

强者为尊,弱者,死无葬身之地

 
 

回复

135

帖子

0

TA的资源

纯净的硅(初级)

20
 

回复 19楼 辛昕 的帖子

是那样的,看看大家的看法~
此帖出自编程基础论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表