在C中使用strcat会覆盖不相关的字符串



代码如下:

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";。或者分配一个新的第三个数组,并将字符串复制到该数组中。

相关内容

  • 没有找到相关文章

最新更新