C 我的链表的简单代码似乎是错误的,但我不知道这个代码的错误在哪里

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

我的链接列表代码打印字符串为空,打印整数为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;

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很高兴我能提供帮助。如果你觉得它有用的话,请随意使用。