A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© jy02305403 中级黑马   /  2014-11-7 13:51  /  1493 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 jy02305403 于 2014-11-7 16:10 编辑

最后输出的结果是:goodb
为什么会这样,求大神解答,谢谢!

QQ20141107-1@2x.png (153.19 KB, 下载次数: 37)

QQ20141107-1@2x.png

评分

参与人数 1技术分 +1 收起 理由
星河鹭起 + 1

查看全部评分

6 个回复

正序浏览
每次循环都会重新计算strlen(s),第一次循环结束后s多了一个字符变长了,为5,i=1时,s[5+1] = t[1],这样一来s[5]就被无视了,i=2时,s[5+2]=t[2],我不知道为何s[5]值是0,也就是'\0',最后输出s的时候停在s[5]了,事实上s[6]='y',s[7]='e'。另外s没定义大小就往后连字符串会不会不太严谨。
回复 使用道具 举报
问题非常明显,就是处在对不定长s的赋值上,strlen(s) 是 >= 4的,不定长数组并不以\0结尾!一定要确记。你把赋值的长度直接改成s的长度4就ok了。
回复 使用道具 举报
你讲数组s的长度加上去试试,char s[] 没有指定数组长度,编译器根据后面的初始化自己计算长度,所以数组s的长度是5,长度不够
回复 使用道具 举报 1 0
我 认为 数组s、t在栈中,占用的是两块连续的内存空间 ,大概是这样的‘g’ ‘o’ ‘o’  ‘d’ ‘\0’ ‘b’ ‘y’'e';而s的长度只是5,当为s[5]赋值时,它是将是是为它下面的一块内存赋值:即为t[0]赋值
回复 使用道具 举报
直接用strcat
你自己写的方法,总觉得哪里不对
回复 使用道具 举报
你把代码贴上来
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马