为什么调用strcpy()会导致源字符串的更改?

时间:2014-12-19 20:21:46

标签: c strcpy

main()
{
      char a[]="abss";
      char c[]="";
      strcpy(c,a);
      printf("%s",a);
}

为什么源字符串a使用strcpy()进行更改只有当字符串c大于或等于字符串a时才会检查它?

4 个答案:

答案 0 :(得分:7)

c的大小为1,但您尝试将5个字符复制到其中。这会导致未定义的行为。

为了解释你所看到的,可能会发生的事情是ca在内存中彼此相邻存储,所以你写入c的内容会溢出并降落a

答案 1 :(得分:2)

你没有足够的存储空间用于c(只有1个字节的终结符)你要覆盖内存。

尝试char c [8] =“”;

答案 2 :(得分:1)

官方回答:

为目标字符串分配的内存为1个字符,源字符串的长度为5个字符。因此,您正在通过C语言标准调用未定义的行为。

实际答案:

为目标字符串分配的内存为1个字符,源字符串的长度为5个字符。您的特定编译器可能已在内存中的目标字符串之后立即分配源字符串。因此,第一个字符成功复制到目标字符串中,其余4个字符将复制到源字符串本身。


请注意,您还有另一个问题,因为目标字符串不再以空值终止。

答案 3 :(得分:0)

您需要为未分配的目标分配内存。在你的情况下它应该是

char[8] c;

它应该可以正常工作