为什么以下代码会产生分段错误

时间:2017-06-30 06:15:59

标签: c pointers segmentation-fault c-strings

我尝试使用strcpy将字符串复制到指针。它会导致分段错误。这就是原因。

#include <stdio.h>
#include <string.h>
int main()
{   
    char *str=NULL;
    strcpy(str,"C-DAC");
    printf("%s\n",str); 
    return 1;
}

2 个答案:

答案 0 :(得分:0)

你的琴弦指向的是什么?无处!

这就是你出现分段错误的原因。您必须将堆栈上的变量分配为数组或将其定义为指针,然后使用malloc分配内存。使用malloc时,请不要忘记包含&#34; stdlib.h&#34;

要么这样做:

char str[6];
strcpy(str,"C-DAC");

char *str=malloc(sizeof(*str) * 6);
strcpy(str,"C-DAC");

答案 1 :(得分:0)

计算机内存分为不同的部分。操作系统的一个段,用于代码,用于全局变量的局部变量(称为堆栈)。现在您正在初始化指向NULL的指针,这意味着指针str现在指向地址0.该地址根本不适用于您的程序,它适用于操作系统。为了在您尝试编写该区域时保护您的系统,您的程序将暂停。