2012-04-26 44 views
11

Tôi tự hỏi tại sao tôi nhận được lỗi phân đoạn trong mã dưới đây.lỗi phân đoạn với 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; 
} 

Trả lời

21

Bạn chưa khởi tạo *str_new do đó, chỉ cần sao chép str_old đến một số địa chỉ ngẫu nhiên. Bạn cần phải làm một trong hai điều này:

char str_new[100]; 

hoặc

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

Bạn sẽ phải #include <stdlib.h> nếu bạn chưa sẵn sàng khi sử dụng chức năng malloc.

7

str_new là một con trỏ chưa được khởi tạo, vì vậy bạn đang cố ghi vào địa chỉ ngẫu nhiên (quasi).

2

str_new không trỏ đến bộ nhớ hợp lệ - nó chưa được khởi tạo, chứa rác và có khả năng trỏ vào bộ nhớ thậm chí không được ánh xạ nếu bạn gặp lỗi phân đoạn. Bạn phải đặt str_new điểm thành một khối bộ nhớ hợp lệ đủ lớn để giữ chuỗi sở thích - bao gồm cả \0 byte ở cuối - trước khi gọi strcpy().