2012-04-26 97 views
11

我想知道爲什麼我在下面的代碼中得到分段錯誤。分段故障與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; 
} 

回答

21

您尚未初始化*str_new,因此它只是將str_old複製到某個隨機地址。 你需要做的無論是這樣的:

char str_new[100]; 

char * str = (char *) malloc(100); 

你將不得不#include <stdlib.h>,如果你尚未使用malloc函數時。

7

str_new是一個未初始化的指針,因此您正在嘗試寫入(準)隨機地址。

2

因爲str_new未指向有效內存 - 未初始化,包含垃圾,並且可能指向內存,如果出現分段錯誤,它們甚至不會映射到內存中。在調用strcpy()之前,必須使str_new指向一個足以保存感興趣的字符串的有效內存塊 - 包括末尾的\0字節。