我想知道为什么我在下面的代码中出现分段错误。
int main(void)
{
char str[100]="My name is Vutukuri";
char *str_old,*str_new;
str_old=str;
strcpy(str_new,str_old);
puts(str_new);
return 0;
}
我想知道为什么我在下面的代码中出现分段错误。
int main(void)
{
char str[100]="My name is Vutukuri";
char *str_old,*str_new;
str_old=str;
strcpy(str_new,str_old);
puts(str_new);
return 0;
}
您尚未初始化*str_new
,因此它只是复制str_old
到某个随机地址。您需要执行以下任一操作:
char str_new[100];
或者
char * str = (char *) malloc(100);
#include <stdlib.h>
如果您还没有使用 malloc 函数,则必须这样做。
str_new
是一个未初始化的指针,所以你试图写入一个(准)随机地址。
因为str_new
它没有指向有效的内存——它未初始化,包含垃圾,并且如果您遇到分段错误,可能指向甚至没有映射的内存。在调用之前,您必须str_new
指出一个足够大的有效内存块来保存感兴趣的字符串(包括\0
末尾的字节)strcpy()
。