LinkedList在C中包含结构



我正在尝试在C中包含带有数据的struct的C中 linkedlist ;但是,由于指针的一些问题,我不能。我在c中是全新的。这是我的代码:主要目标是编写名称并将其存储在linkedlist中包含struct

(我得到此错误错误:

分配给类型'Contacto {aka struct时的不兼容类型 }’来自类型" void *" Enlace-> contact = malloc(sizeof(contact((;(

#include <stdio.h>
#include <stdlib.h>
    typedef struct
     {
        char name[50];
        char apellido[50];
     } Contacto ;
    typedef struct nodo {
        Contacto  contact;
        struct nodo* siguiente;
    } nodo;
       nodo *cabecera = NULL;
       nodo *actual = NULL;
      void viewNames()
       {
           nodo *ptr;
           ptr = cabecera;
           printf("**********************************");
           while(ptr != NULL) {        
           printf("%s",ptr->contact.nombre);
           ptr = ptr->siguiente;
    }
            printf("**********************************");
}

    int main (int argc, char *argv[])
     {

         nodo *enlace;
         char nom;
         int cont=0;
         Contacto contact;

         while (1){
              printf("Write names or 0 to exit ");
              scanf("%s",&nom);
               if (nom == '0') {
                    cabecera = enlace;
                    break;
                } else {
                   enlace = (nodo *) malloc(sizeof(nodo));
                   enlace->contact = malloc(sizeof(contact)); 
                   strcpy(enlace->contact.nombre, nom); 
                   enlace->siguiente = actual;
                   actual = enlace;
        }
    }
    viewNames();
}

以及很多错别字,您的代码中有一些问题:

  1. 将角色指针传递给scanf("%s",&nom);。我想您想读一个字符串,而是通过字符的地址(因为字符阵列是内部的指针;(。然后,您应该将nom声明为字符数组并以这种方式使用。
  2. 您为什么要在此处为node->contact分配内存:enlace->contact = malloc(sizeof(contact));您已将其声明为普通的结构变量(而不是指针(,因此您无需为此分配内存。

  3. viewNames()方法中,也许您的意思是:printf("%s",ptr->contact.name);。由于查看了您发布的代码,Contacto已有此字段,而不是您要访问的代码。

  4. 如果您想使用strcpy,将nom复制到您的动态分配结构中,则必须包括C字符串库。

我更改了您的代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h> //
typedef struct
{
  char name[50];
  char apellido[50];
} Contacto ;
typedef struct node {
  Contacto  contact; //
  struct node* siguiente;
} node;
node *cabecera = NULL;
node *actual = NULL;
void viewNames()
{ 
  node *ptr;
  ptr = cabecera;
  printf("**********************************");
  while(ptr != NULL) {        
    printf("%s",ptr->contact.name); //
    ptr = ptr->siguiente;
  }
  printf("**********************************");
}
int main (int argc, char *argv[])
{
  node *enlace;
  char nom[100]; //
  int cont=0;
  Contacto contact;
  while (1){
    printf("Write names or 0 to exit ");
    scanf("%s",nom);
    if (nom[0] == '0') {
      cabecera = enlace;
      break;
    } else {
      enlace = (node *) malloc(sizeof(node));
      //enlace->contact = (Contacto *)malloc(sizeof(Contacto)); //
      strcpy(enlace->contact.name, nom); 
      enlace->siguiente = actual;
      actual = enlace;
    }
  }
  viewNames();
}

当我运行此功能时,我可以看到您从用户获取的链接列表元素:

~/work : $ g++ testLL2.cpp   
~/work : $ ./a.out 
Write names or 0 to exit Rohan
Write names or 0 to exit Rohit
Write names or 0 to exit Raman
Write names or 0 to exit Ronny
Write names or 0 to exit Reena
Write names or 0 to exit 0
**********************************ReenaRonnyRamanRohitRohan**********************************~/work : $

相关内容

  • 没有找到相关文章