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

strcpy与strcat的关系

为什么先拼接再拷贝不行呢。。。

正在回答

5 回答

首先你得知道:

s1是一个长度为100的字符数组。

s2是一个长度为4的字符数组。这是因为虽然你在声明时没有指定数组的长度,但是你用一个长度为4的字符串初始化s2,所以编译器自动将s2的长度确定为4。

s3是一个长度为4的字符数组。道理同上。


strcat(s2, s3) 这个函数是将s3中的内容(包括s3结尾的'\0')复制到s2中最后一个字符的后面(覆盖掉s2原来结尾的'\0'),这样就能把两个字符串中的字符连起来了,并且还是'\0'结尾。

注意:这就需要s2有足够的长度来容纳这么多的字符,长度至少为 strlen(s2) + strlen(s3) + 1,最后这个1就是结尾的'\0'。


但是你的s2长度只有4,所以写越界了。而后面的字符有可能写入到了后面,也有可能无法成功写入而发生错误。

为什么说是有可能呢? 因为strcat这个函数就是从s2的最后写入s3的内容,它不管你这个字符串到底要写多长,也不知道容纳它的数组有多长,其实它都不知道你的字符串是不是在数组中,它只是单纯地在内存中往后写。所以很可能写出界,更糟的是可能会覆盖掉后面的东西,引起各种各样的错误,甚至是崩溃!  所以在真实的开发中千万要注意数组访问越界的问题。

在本站中它判断你写了 strcat( s1 , s3 ) 才算写对。因为s1足够长。

1 回复 有任何疑惑可以回复我~
#1

天再高又怎样 提问者

非常感谢!原来如此
2015-01-30 回复 有任何疑惑可以回复我~

我懂了

0 回复 有任何疑惑可以回复我~

谢谢啦

但是我那样做就显示不出来结果了,...

0 回复 有任何疑惑可以回复我~

这个只是个练习,可以按你说的,这里主要的目的是让大家对该方法的使用有个认知和练习

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
C语言入门
  • 参与学习       926019    人
  • 解答问题       20793    个

C语言入门视频教程,带你进入编程世界的必修课-C语言

进入课程

strcpy与strcat的关系

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信