为什么下面的代码会产生段错误

why does the following code produce segmentation fault

我尝试使用 strcpy 将字符串复制到指针。它会导致分段 fault.any 原因。

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

你的字符串指向哪里?无处可去!

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

要么这样做:

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

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

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