C 我的链表的简单代码似乎是错误的,但我不知道这个代码的错误在哪里
我的链接列表代码打印字符串为空,打印整数为0。有人能解释一下这个简单代码中的错误吗?先谢谢你C 我的链表的简单代码似乎是错误的,但我不知道这个代码的错误在哪里,c,C,我的链接列表代码打印字符串为空,打印整数为0。有人能解释一下这个简单代码中的错误吗?先谢谢你 #include<stdio.h> #include<stdlib.h> #include<string.h> struct data{ char name[100]; char type[100]; int quantity; int price; struct data *next; } *head = NULL , *tail = NULL; in
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct data{
char name[100];
char type[100];
int quantity;
int price;
struct data *next;
} *head = NULL , *tail = NULL;
int flag = 0;
struct data *newData (char name[] , char type[] , int quantity , int price ){
struct data *curr = (struct data*) malloc (sizeof (struct data*));
strcpy(curr->name, name);
strcpy(curr->type, type);
curr->quantity = quantity;
curr->price = price;
curr->next = NULL;
return curr;
}
打印功能:
void printAll(){
struct data *ptr = head;
while(ptr!=NULL){
printf("name : %s\n" , ptr->name);
printf("type : %s\n", ptr->type);
printf("quantity : %d\n" , ptr->quantity);
printf("price : %d\n" , ptr->price);
ptr = ptr->next;
}
}
int main(){
int q1 = 24;
int h1 = 19000;
char n1[100] = "americano";
char n4[100] = "yes";
insert(n1, n4, 200, 20000);
printAll();
return 0;
}
主要功能:
void printAll(){
struct data *ptr = head;
while(ptr!=NULL){
printf("name : %s\n" , ptr->name);
printf("type : %s\n", ptr->type);
printf("quantity : %d\n" , ptr->quantity);
printf("price : %d\n" , ptr->price);
ptr = ptr->next;
}
}
int main(){
int q1 = 24;
int h1 = 19000;
char n1[100] = "americano";
char n4[100] = "yes";
insert(n1, n4, 200, 20000);
printAll();
return 0;
}
输出:
name : americano
type :
quantity : 0
price : 0
有时在输出“类型:”部分,它可以打印“是”和“空白”。在
newData
中,您没有分配足够的内存:
struct data *curr = (struct data*) malloc (sizeof (struct data*));
不是为结构数据分配足够的内存,而是为指向结构数据的指针分配空间。这小于结构的大小,因此当您尝试写入它时,您会写入超过调用的分配内存的边界
更改传递到malloc
的大小,以反映结构大小,而不是指针大小
struct data *curr = malloc (sizeof (struct data));
您的意思是我需要将malloc部分更改为:
structdata*curr=malloc(sizeof(structdata))代码> @ Abrkkababra,是的,我说的是这样。但是它变成了一个错误:“代码>无效的转换从‘无效*’到‘数据*’[-fPrimisty] 这个怎么样??abrkaDabra,你用C++编译器编译而不是C编译器。确保该文件具有.c
扩展名,如果在Linux上,请使用gcc而不是g++。@abrakadabra很高兴我能提供帮助。如果你觉得它有用的话,请随意使用。