C语言学习----由strcat的引发的空间思索问题

本文探讨了在C语言中使用strcat函数进行字符串拼接时可能出现的段错误问题。通过示例代码,作者指出当直接使用char *str="str"时,由于未分配足够的空间,会导致程序异常。在C++编译器中,这类问题会被更严格地检查。解决方案是预先定义足够大的字符数组,如char s1[100] = "str"。作者反思了C语言的弱类型特性可能导致的安全隐患,并表示将进一步学习和深化理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

众所周知  strcat(s1,s2)为C语言的字符串串接函数

今天遇到一个问题   

如下:

    char *s1 = "str";
    char s2[2] = {0};
    strcat(s1,s2);

这样串接在c++的编译器下会发生段错误报错  程序会异常 

开始以为是结束符的问题  故改成了

 即使将 s2[0]='a' , s2[1]='\0' 仍旧如此

这是为什么呢

用sprintf来进行串接  依旧一样  意识到这是个人问题  

后来 将s1写成了   char s1[100] = "str";

问题立即被解决  才恍然大悟  原来是空间划分的问题  char *str =“str” 给str划分的空间是“str”这个字符串的大小  

已经无法再加入  强行加入后 地址未被指定划分  会跑飞   在C语言编译器中 这类问题很多情况下都不会报错  最多给个警告  最后造成了重大的漏洞 

c是弱语言类型  很多问题都被忽略   而c++是强语言类型  很多问题都被具体提出来了  

而char s1[100] = "str";则强行分配了这么大的地址 只要没超过就不会有问题  但是占用的空间却固定

这个问题以前完全被我忽略了   突然发现 路还是很长  很多东西都不懂    有待继续加深


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值