众所周知 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";则强行分配了这么大的地址 只要没超过就不会有问题 但是占用的空间却固定
这个问题以前完全被我忽略了 突然发现 路还是很长 很多东西都不懂 有待继续加深
本文探讨了在C语言中使用strcat函数进行字符串拼接时可能出现的段错误问题。通过示例代码,作者指出当直接使用char *str="str"时,由于未分配足够的空间,会导致程序异常。在C++编译器中,这类问题会被更严格地检查。解决方案是预先定义足够大的字符数组,如char s1[100] = "str"。作者反思了C语言的弱类型特性可能导致的安全隐患,并表示将进一步学习和深化理解。
1865

被折叠的 条评论
为什么被折叠?



