代码如下:
char seg1[] = "abcdefgh";
char seg2[] = "ijklmnop";
char seg3[] = "qrstuvwx";
strcat(seg2, seg3);
那么存储在seg1中的值将变成:
"rstuvwx "
我已经学会了声明位置接近的字符串在堆栈区域也是相邻的,但是我忘记了细节。
我猜当strcat()被执行时,seg1的内存地址被覆盖,但我不确定具体的过程。有人能告诉我这个事件的具体过程吗?由于
C没有字符串类,它有字符数组,可以通过附加空结束符作为字符串使用。由于没有字符串类,所有字符串/数组的内存管理都必须手动完成。
char seg1[] = "abcdefgh";
为精确分配8个字符和1个空终止符的空间。没有空间在末尾添加任何其他内容。如果你尝试了,那就是未定义行为的领域,在那里任何事情都可能发生。崩溃,覆盖其他变量,程序停止按预期运行等等。
通过分配足够的空间来在末尾附加一些东西来解决这个问题,例如char seg1[50] = "abcdefgh";
。或者分配一个新的第三个数组,并将字符串复制到该数组中。