免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: scudong
打印 上一主题 下一主题

一道面试题,输出为什么为空 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2009-09-09 16:01 |只看该作者
原帖由 mcemil 于 2009-9-9 11:45 发表
6-8楼,
printf("%s\n",p2-strlen(p1)-2);

你这strlen(p1)也有问题,p1也跑偏了,有可能指向了%s\n了.

论坛徽章:
0
12 [报告]
发表于 2009-09-09 17:20 |只看该作者

回复 #11 bsdc 的帖子

谢谢指正,一般能不用指针尽量不用的

论坛徽章:
0
13 [报告]
发表于 2009-09-09 17:59 |只看该作者
原帖由 mcemil 于 2009-9-9 17:20 发表
谢谢指正,一般能不用指针尽量不用的


。。。。
斗胆请问为何?

论坛徽章:
0
14 [报告]
发表于 2009-09-09 18:44 |只看该作者
++运算符改变源操作数

论坛徽章:
0
15 [报告]
发表于 2009-09-09 19:12 |只看该作者
原帖由 felixzxh 于 2009-9-9 18:44 发表
++运算符改变源操作数

你的意思是指针移到末尾了吧?

论坛徽章:
0
16 [报告]
发表于 2009-09-09 19:36 |只看该作者
是的,要把指针指回来啊,常用的方法是在while前将头指针保留

论坛徽章:
0
17 [报告]
发表于 2009-09-09 20:53 |只看该作者

回复 #1 scudong 的帖子

p1,p2都指向字符串结束符后面了。

论坛徽章:
0
18 [报告]
发表于 2009-09-10 00:00 |只看该作者
原帖由 mcemil 于 2009-9-9 17:20 发表
谢谢指正,一般能不用指针尽量不用的

论坛徽章:
0
19 [报告]
发表于 2009-09-10 01:04 |只看该作者
哈哈,这个问题第一眼看上去还真没有反应过来,如果让我做在面试时肯定会做错,忘记这时两个指针都已经指到了串的末尾。。

论坛徽章:
0
20 [报告]
发表于 2009-09-10 09:47 |只看该作者
可以先用一个指针p3保存p2的初始值,也就是字符串的首地址,操作完后,再打印p3

main()   
{   
        char *p1=“name”;   
        char *p2, *p3;   
        p2=(char*)malloc(20);   
        memset (p2, 0, 20);   
        p3 = p2;
        while(*p2++ = *p1++);   
        printf(“%s\n”,p3);   
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP