我想知道为什么我在下面的代码中出现了分段错误。
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;
}
答案 0 :(得分:25)
您尚未初始化*str_new
,因此只是将str_old
复制到某个随机地址。
你需要这样做:
char str_new[100];
或
char * str = (char *) malloc(100);
如果您还没有使用malloc函数,则必须#include <stdlib.h>
。
答案 1 :(得分:7)
str_new
是一个未初始化的指针,所以你试图写一个(准)随机地址。
答案 2 :(得分:2)
因为str_new
没有指向有效的内存 - 它是未初始化的,包含垃圾,并且可能指向内存,如果你遇到分段错误,它甚至都不会被映射。您必须使str_new
指向一个足够大的有效内存块,以便在调用\0
之前保存感兴趣的字符串 - 包括最后的strcpy()
字节。