众所周知 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";则强行分配了这么大的地址 只要没超过就不会有问题 但是占用的空间却固定
这个问题以前完全被我忽略了 突然发现 路还是很长 很多东西都不懂 有待继续加深