我正在尝试在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();
}
以及很多错别字,您的代码中有一些问题:
- 将角色指针传递给
scanf("%s",&nom);
。我想您想读一个字符串,而是通过字符的地址(因为字符阵列是内部的指针;(。然后,您应该将nom
声明为字符数组并以这种方式使用。 -
您为什么要在此处为
node->contact
分配内存:enlace->contact = malloc(sizeof(contact));
您已将其声明为普通的结构变量(而不是指针(,因此您无需为此分配内存。 -
在
viewNames()
方法中,也许您的意思是:printf("%s",ptr->contact.name);
。由于查看了您发布的代码,Contacto已有此字段,而不是您要访问的代码。 -
如果您想使用
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 : $