我已经知道了如何在C语言的链表中添加一个整数,但是我需要添加一个字符串,但这根本行不通。
main函数从用户那里获取数据并在将其添加到链接列表后在show函数中进行打印。
列表和主要
struct nlista{
char dado[10];
struct nlista *prox;
}*Head;
int main(){
int op;
char data[10];
Head = NULL;
printf("type a value: ");
scanf("%s",&data);
inserir(data);
printf("the element is : ");
show();
}
inserir():在列表末尾添加元素
void inserir(char data){
nlista *novoelemento;
novoelemento = (struct nlista *)malloc(sizeof(struct nlista));
nlista *check;
check = (struct nlista *)malloc(sizeof(struct nlista));
novoelemento->dado = data;
if(Head == NULL){
Head = novoelemento;
Head->prox = NULL;
}
else{
check = Head;
while(check->prox != NULL)
check = check->prox;
check->prox = novoelemento;
novoelemento->prox = NULL;
}
show():显示链接列表
void show()
{
nlista *check;
check = (struct nlista *)malloc(sizeof(struct nlista));
check = Head;
if (check == NULL){
return;
}
while(check != NULL) {
printf("%s", check->dado);
check=check->prox;
}
printf("\n");
}
我想念什么?编译器消息是:从char *到char的无效转换。在inserir(data)行中;
答案 0 :(得分:1)
我们有char dado[10];
,但是novoelemento->dado = data;
如您所见,它无法编译。
您似乎想要strncpy(novoelemento->dado, data, 10)[9] = 0;
来复制数据中的字符串,并确保其正确以null终止。
如果您有strlcpy
,则可以像strlcpy(novoelemento->dado, data, 10);
一样做得更好
答案 1 :(得分:1)
对不起,但是我发现您的代码中有很多错误。我为您的问题写了一个非常简单的解决方案。请参考并纠正您的错误。
值不过是字符串,即数据(在代码中)作为参数传递给主函数inserir中的参数。请记住,链表的每个节点都由一个字符串元素和指向下一个节点的指针组成。字符串的长度可以不同。步骤1和步骤2将解决此问题(请参见代码)。希望你现在明白了。
#include <stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct nlista{
char *data;
struct nlista *prox;
}Node;
Node * inserir(Node *, char *);
'''inserir function should return your head node'''
void show(Node *);
'''show function takes head node'''
int main()
{
char data[10];
Node * Head = NULL;
printf("Type a value: ");
scanf("%s",data);
Head = inserir(Head,data);
printf("the element is : ");
show(Head);
}
Node* inserir(Node *Head, char *value)
{
Node *novoelemento;
novoelemento = (Node *)malloc(sizeof(Node));
//step 1. allocate memory to hold word
novoelemento->data = malloc(strlen(value)+1);
//step 2. copy the current word
strcpy(novoelemento->data,value);
Node *check;
check = (Node *)malloc(sizeof(Node));
if(Head == NULL){
Head = novoelemento;
Head->prox = NULL;
}
else{
check = Head;
while(check->prox != NULL)
check = check->prox;
check->prox = novoelemento;
novoelemento->prox = NULL;
}
return Head;
}
void show(Node *Head)
{
//check is of Node type using which you traverse the list and print the values
Node *check;
check = (Node *)malloc(sizeof(Node));
check = Head;
if (check == NULL){
return;
}
while(check != NULL) {
printf("%s", check->data);
check=check->prox;
}
printf("\n");
}
希望这会对您有所帮助。