我想知道爲什麼我在下面的代碼中得到分段錯誤。分段故障與strcpy
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;
}
我想知道爲什麼我在下面的代碼中得到分段錯誤。分段故障與strcpy
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
未指向有效內存 - 未初始化,包含垃圾,並且可能指向內存,如果出現分段錯誤,它們甚至不會映射到內存中。在調用strcpy()
之前,必須使str_new
指向一個足以保存感興趣的字符串的有效內存塊 - 包括末尾的\0
字節。