Mỗi lần tôi thử chạy chức năng này, tôi nhận được một lỗi segfault.
char *hist_array[20];
int history_counter = 0;
void save_to_history(char *temp){
temp = malloc(512);/*512 là kích thước của mảng tạm thời*/
printf("temp = %s\narray = %s",temp,hist_array[history_counter]);/*debug*/
strcpy(hist_array[history_counter],temp);
printf("Đã lưu %s vào lịch sử vào %d\n\n",hist_array[history_counter],history_counter);
history_counter++;
}
Tôi không chắc liệu mình có sử dụng đúng cách hay không malloc
, nhưng theo như tôi biết thì nó sẽ giúp chuyển đổi chuỗi của tôi nhiệt độ
Lưu chính xác vào mảng chuỗimảng lịch sử
. Hơn nữa, nhiệt độ sẽ không bao giờ NULL
.
编辑 1: Đã thay đổi sizeof(temp) thành kích thước phù hợp 512, vẫn xuất hiện lỗi phân biệt
.
Vấn đề nằm ở tuyên bố sau -
strcpy(hist_array[history_counter], temp);
strcpy
尝试将 nhiệt độ
Bộ đệm được trỏ đến được sao chép vào hist_array[history_counter]
bộ đệm được trỏ đến, nhưng char *hist_array[20];
Sẽ hist_array
Được xác định là một mảng chứa 20 con trỏ ký tự. Bạn nên thay đổi chức năng của mình -
char *hist_array[20];
int history_counter = 0;
void save_to_history(char *temp) {
// +1 cho byte null kết thúc dưới dạng strlen
// không tính byte rỗng
hist_array[history_counter] = malloc(1 + strlen(temp));
if(hist_array[history_counter] == NULL) {
printf("không đủ bộ nhớ để cấp phát\n");
// xử lý nó
}
strcpy(hist_array[history_counter], temp);
printf("Đã lưu %s vào lịch sử vào %d\n\n",
hist_array[history_counter],
history_counter);
history_counter++;
}
Tôi là một lập trình viên xuất sắc, rất giỏi!