Передача массивов символов в связанный список
Я не решался задать вопрос по этому поводу, потому что я беспокоюсь о том, чтобы задать глупый вопрос, но вот оно:
В настоящее время я пытаюсь создать программу, которая будет принимать целые строки, помещать их в массивы символов и переносить эти массивы в связанный список. У меня все работает до момента фактического помещения массивов в связанный список.
Сначала я пытался создать каждый узел с самим массивом, который давал мне первый элемент массива. Затем я обнаружил, что мне нужно использовать strcpy().
Я не уверен, что не так в данный момент, но я думаю, что это связано с распределением памяти, потому что это дает мне segfault. Это, однако, сбивает с толку, потому что выделение памяти для rach-узла уже решено.
Спасибо за любую помощь, эта часть сводит меня с ума уже несколько часов.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 100
struct node {
char info;
struct node *link;
} *start;
void create(char[]);
void display();
void insert_end(char[]);
int main() {
int i;
start=NULL;
char data[SIZE];
printf("Please enter a word: ");
fgets(data, SIZE, stdin);
create(data);
for(i=0; i<5; i++)
{
printf("Please enter a word: ");
fgets(data, SIZE, stdin);
insert_end(data);
}
display();
return 0;
}
void create(char data[])
{
struct node *temp;
temp = (struct node *)malloc(sizeof(struct node));
if (start == NULL)
{
strcpy(temp->info,data);
temp->link=NULL;
start=temp;
}
}
void display()
{
struct node *ptr;
ptr = start;
while (ptr!=NULL)
{
printf("%c", ptr->info);
ptr=ptr->link;
}
}
void insert_end(char data[])
{
struct node *ptr, *tempnode;
ptr = start;
while(1)
{
if(ptr->link != NULL)
{
ptr=ptr->link;
}
else
break;
}
tempnode=(struct node *)malloc(sizeof(struct node));
strcpy(tempnode->info,data);
tempnode->link=NULL;
ptr->link=tempnode;
}
2 ответа
Как вы заявили, что используете массивы, пространство должно быть зарезервировано в info
член структуры связанного списка. Тип char будет содержать только один символ.
struct node {
char info[SIZE];
struct node *link;
} *start;
Если информация является массивом, printf требует %s
модификатор формата.
printf("%s\n", ptr->info);
Информация - это символ, а не символ *. Скомпилируйте с -W -Wall, вы увидите большинство ваших ошибок.