Передача массивов символов в связанный список

Я не решался задать вопрос по этому поводу, потому что я беспокоюсь о том, чтобы задать глупый вопрос, но вот оно:

В настоящее время я пытаюсь создать программу, которая будет принимать целые строки, помещать их в массивы символов и переносить эти массивы в связанный список. У меня все работает до момента фактического помещения массивов в связанный список.

Сначала я пытался создать каждый узел с самим массивом, который давал мне первый элемент массива. Затем я обнаружил, что мне нужно использовать 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, вы увидите большинство ваших ошибок.

Другие вопросы по тегам