关于c一个简单的问题
char str1[] = "abcdeft";
const char *str2 = "1111";
strcat(str1, str2);
printf("%s", str1);
这样写合法吗?
我在想,str1是一个数组,那么它初始分配的内存肯定是固定的,但是当调用strcat后,在他末尾又添加了一些东西。
假如在内存分配时,str1后面的内存被分配了,那么我调用了strcat,肯定会把这里内存的内容改写了,那程序肯定会出问题啊?
[解决办法]
不行,会越界
[解决办法]
这样肯定不合法的 。
char str1[] = "abcdeft",str1数组的大小已经确定了,只能容纳"abcdeft",你再把str2的内容添加到后面是会发生内存访问错误的。
我按照你的代码跑了一遍 编译没问题,运行错误,最后也打印出了abcdeft1111
但是运行时出现内存访问异常
[解决办法]
strcat不进行str1的长度检查.因此需自行保证str1的长度足够.
而你的程序中的写法char str1[] = "abcdeft"; str1正好没有多余长度. str1会被"abcdeft"填满.
导致的问题是会写导致不属于str1的空间被非法覆盖.