为了账号安全,请及时绑定邮箱和手机立即绑定

怎样理解“strcat在使用时s1与s2指的内存空间不能重叠”

怎样理解“strcat在使用时s1与s2指的内存空间不能重叠”

C
小雾3378873 2016-06-15 13:50:26
查看完整描述

3 回答

已采纳
?
super_mb

TA贡献101条经验 获得超107个赞

我觉得strcat函数的功能应该是这样实现的:

while(*s1)  //读到s1的结尾

{

        s1++;

}

while(*s1++ = *s2++)  //将s2拼接到s1后面

{

        NULL;

}

照上面的代码来看,如果s1和s2内存空间是重叠的,那么s2和s1的结尾肯定是一样的,则当你把s2的每一个字符加到s1后,s2本身最后也会加上这个字符,于是第二个循环会一直循环下去。 所以规定不能重叠吧。

查看完整回答
4 反对 回复 2016-06-15
  • 小雾3378873
    小雾3378873
    *s1什么意思, *s1++=*s2++更不看不懂了 能解释下么
  • super_mb
    super_mb
    这里的s1和s2都是strcat函数里面定义的局部变量,各自指向第一个和第二个字符串。s1是个指针,则*s1是取其每一位的字符的值,循环里面一直往下读,直到最后为'\0'退出循环,这时候s1指向第一个字符串结尾,第二个就是将第二个字符串的每一位赋给第一位的结尾,赋值完后,s1和s2都++,即指向下一个字符,而while判断的是s2所指向的当前字符。所以当把s2的结束符赋到第一个字符串的最后,这时候再判断,while('\0')就跳出循环了。
  • 小雾3378873
    小雾3378873
    非常感谢
?
慕村2869945

TA贡献1条经验 获得超0个赞

strcat


查看完整回答
反对 回复 2017-03-03
  • 3 回答
  • 0 关注
  • 2186 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信