2017-06-29 168 views
-2

我试图在C中创建一个链接列表,其中包含带有数据的struct;但是,我不能由于指针的一些问题。我在c中是全新的。这是我的代码:主要目标是编写的名字,并将它们存储在一个LinkedList包含一个struct链接列表C中包含结构

(我得到这个错误错误:

incompatible types when assigning to type ‘Contacto {aka struct }’ from type ‘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(); 
} 
+0

“由于指针的一些问题“。你遇到什么具体问题?你不能只说“一些问题”,并期望人们知道你有什么确切的问题或问题。它编译失败吗?崩溃?产生错误的结果?究竟是什么? – kaylum

+0

很抱歉,我得到这个错误错误:分配给输入“CONTACTO {又名STRUCT }”从类型“void *的”当不兼容的类型 enlace->接触= malloc的(的sizeof(接触)); – jadev

+1

这里的问题的负载:字符串的scanf到char变量中。与“contact.nombre”不匹配的代码? malloc的非指针变量'enlace-> contact'就够了。我放弃。 – John3136

回答

0

随着错别字很多,你已经在你的代码的一些问题:

  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 String library

我改变你的代码位:

#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 : $ 
+0

@Downvoter:请说明你采取行动的理由。我会更新如果我失去了一些东西。 –

+0

Thankkks!那就是我想要的,我有点困惑于指针,我需要多练习 – jadev