为什么下面的代码会产生段错误
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。该地址对您的程序来说根本不可用,它适用于操作系统。为了在您尝试写入该区域时保护您的系统,您的程序已停止。
我尝试使用 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。该地址对您的程序来说根本不可用,它适用于操作系统。为了在您尝试写入该区域时保护您的系统,您的程序已停止。