问题是关于使用char指针的“strcpy”,这给了我分段错误。使用下面的简单代码,直到字符串中没有字符达到4,即“ZZZZ”,才会发生故障。为什么呢?
案例1:
#include<stdio.h>
#include<string.h>
int main()
{
char *name;
strcpy(name,"Z");
printf("%s\n",name);
return 0;
}
此代码的输出是:
ž
案例2: 当我在strcpy中使用2个字符时:
的strcpy(姓名, “ZZ”); 此代码的输出是:
ZZ
案例3: 当我在strcpy中使用2个字符时:
的strcpy(姓名, “ZZZ”); 此代码的输出是:
ZZZ
案例4: 当我在strcpy中使用2个字符时:
的strcpy(姓名, “ZZZZ”); 此代码的输出是:
ZZZZ 分段错误(核心转储)
类似的结果不仅可以通过strcpy获得,还可以通过gets / puts对获得。应该有与字符串长度相关的内容。我知道指针必须正确初始化。在这里,我只是想了解这种结果的原因,因为它的一致性。 为什么在4个字符后?
答案 0 :(得分:4)
strcpy
复制到现有缓冲区中,但您没有提供。
另一方面,strdup
为您分配缓冲区。