Tôi mới làm quen với C và tôi đang cố gắng viết một hàm chèn một nút vào đầu danh sách bằng hai cấu trúc sau:
typedef cấu trúc singly_linked_list_node {
dữ liệu char *;
cấu trúc singly_linked_list_node *next;
} nút;
typedef cấu trúc singly_linked_list_head {
nút cấu trúc *đầu tiên;
nút cấu trúc *cuối cùng;
kích thước int;
} danh sách tội lỗi;
chức năng của tôi là
void Insert_at_start(danh sách sin_list*, char *str)
{
chiều dài int;
nút *newnode;
newnode = malloc(sizeof(node));
chiều dài = strlen(str) + 1;
newnode->data = malloc(sizeof(length));
strcpy(newnode->data, str);
newnode->next = list->first;
danh sách->đầu tiên = nút mới;
if (list->last == NULL) list->last = newnode;
}
Khi tôi biên dịch, tôi nhận được cảnh báo "Gán từ loại con trỏ không tương thích [được bật theo mặc định]" trên 3 dòng cuối cùng, vì vậy rõ ràng là tôi đang thiếu thứ gì đó.
通过 cấu trúc singly_linked_list_head
định nghĩa, bạn có thể định nghĩa struct
Loại này sử dụng hai khai báo chuyển tiếp ngầm định. đây là
nút cấu trúc *đầu tiên;
nút cấu trúc *cuối cùng;
Ngoài ra, bạn có nút
định nghĩa kiểu. nút cấu trúc
Kiểu này không bao giờ giải quyết được, nhưng trình biên dịch chấp nhận nó miễn là bạn chỉ sử dụng một con trỏ tới nó. hiện hữu C
Trong ngôn ngữ, có hai không gian tên khác nhau cho tên cấu trúc và định nghĩa kiểu.
通过sử dụngTypedef của bạn sửa mã của bạn:
typedef cấu trúc singly_linked_list_head {
nút * đầu tiên;
nút *cuối cùng;
kích thước int;
} danh sách tội lỗi;
BIÊN TẬP Khi bạn cấp phát bộ nhớ, bạn nên sử dụng str
chiều dài thay vì một biến chiều dài
kích thước để phân bổ bộ nhớdữ liệu
:
chiều dài = strlen(str) + 1;
newnode->data = malloc(sizeof(length));
Thay đổi thành:
chiều dài = strlen(str) + 1;
newnode->data = malloc(length);
Tôi là một lập trình viên xuất sắc, rất giỏi!