/* 若是 strcat(s2,s3); strcpy(s1,s2); 则无法显示*/代码这样的话,应该是整个程序都崩溃掉了,因为前面的语句也无法输出 strcat(s2,s3); strcpy(s3,s2);却可以运行,但是s2的内容却为空,长度为0感觉是s2的空间问题,应该是超出了范围,但是没有报异常却可以运行为什么?
2 回答
onemoo
TA贡献883条经验 获得超454个赞
你的理解没有错,strcat strcpy 这样的函数需要第一个参数处有足够大的存储空间来容纳后面参数接入的字符串。
为什么编译时没有报错呢?
从实现角度说,函数将两个参数都视作指向存储空间的指针,但凭指针并不能判断出其指向的空间有多大,函数只能从这两处空间进行操作,一旦在运行中遇到空间不足,就可能会出问题。
题外话:C语言指针的设计就是为了灵活,C语言的宗旨是相信程序员,不阻止程序员做他们想做的事。所以就要求程序员对原理有充分的理解,这也是C语言“难”的原因。
其实在现实中,这样的错误也很常见,所谓的“缓冲区溢出”漏洞多是存储空间的问题。
- 2 回答
- 0 关注
- 1264 浏览
添加回答
举报
0/150
提交
取消