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

C中字符串的问题

C中字符串的问题

C
月下狂人wzj 2015-07-26 08:18:52
/*    若是    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语言“难”的原因。

其实在现实中,这样的错误也很常见,所谓的“缓冲区溢出”漏洞多是存储空间的问题。

查看完整回答
1 反对 回复 2015-07-26
?
月下狂人wzj

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

厉害,,在请教下, 那为什么将s2复制给s1就直接崩溃;而s2复制给s3是直接将s2空间清0呢??

查看完整回答
反对 回复 2015-07-26
  • 2 回答
  • 0 关注
  • 1274 浏览

添加回答

举报

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