【发布时间】:2021-08-28 22:19:41
【问题描述】:
所以我决定在阅读 Linux 程序员手册的同时测试 strcpy() 的工作原理。我遇到了strcpy的定义
字符串不能重叠,目标字符串 dest 必须是 大到可以接收副本。
因此,我可能会同意目标字符串的大小应该等于或大于源字符串。 但是当我尝试在 CLion 中运行以下程序时,我得到了一个粉碎堆栈错误
#include <stdio.h>
#include <string.h>
int main()
{
char str1[7], str2[3] = "Hiy";
strcpy(str1, str2);
printf("%s", str1);
}
这里 str1 的大小远远超过 str2 的大小。在理想情况下,strcpy 应该将“Hiy”复制到 str1,然后打印功能应该显示“Hiy”,但我仍然得到相同的粉碎堆叠错误。
我认为这可能与 str2 没有空字符有关(因为我已经用字符填充了整个字符数组)但我不确定。关于为什么这不起作用的任何想法?
【问题讨论】:
-
“我仍然收到错误消息。”哪一个?请引用/展示效果并将其与您的期望进行对比。
-
@Yunnosch ok 将编辑
-
请解释您希望
srtcpy()如何确定源字符串的长度,以停止复制。 -
str2[3] = "Hiy";您没有为字符串分配足够的空间。str只能存储最多2个字符的字符串 -
如果你尝试
printf("<%s>", str2); printf("<%s>", str1);会发生什么?