【发布时间】:2010-12-08 18:39:02
【问题描述】:
我试图了解 strcpy 和 strncpy 的区别/缺点。 有人可以帮忙吗:
void main()
{
char src[] = "this is a long string";
char dest[5];
strcpy(dest,src) ;
printf("%s \n", dest);
printf("%s \n", src);
}
输出是:
this is a long string
a long string
问题:我不明白,源代码是如何被修改的。根据解释,strcpy 应该一直复制,直到遇到 '\0',所以确实如此,但是“src”字符串是如何被修改的。
请解释一下。
【问题讨论】:
-
这称为缓冲区溢出。
-
这个缓冲区溢出问题说明了为什么你应该选择使用 strncopy 而不是 strcpy。
-
我无法重现您的代码。我在 dest 数组中得到
tring。 -
@Spidey,这是未定义的行为。 c-faq.com/ansi/undef.html "undefined: 任何事情都可能发生;标准没有强加任何要求。程序可能无法编译,或者执行不正确(崩溃或静默生成不正确的结果),或者它可能幸运地完全按照程序员的意图去做。”
-
谢谢大家。特别是因为您不仅解释了答案,而且还以图形方式显示了它在内存中的工作方式(对于我的案例中显示的行为)。还注意到这可能会引发不同的结果,因为它是未定义的行为。
标签: c string buffer-overflow strcpy