字符串长度对未初始化字符指针的影响

时间:2016-06-17 13:07:53

标签: c strcpy

问题是关于使用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个字符后?

1 个答案:

答案 0 :(得分:4)

strcpy复制到现有缓冲区中,但您没有提供。 另一方面,strdup为您分配缓冲区。