1

I have been hesitant to post a question about this because I'm worried about asking a stupid question, but here it goes:

I am currently trying to create a program that will take whole strings, put them into char arrays and transfer those char arrays to a linked list. I have everything working up to the point of actually putting the arrays into the linked list.

I initially tried to just create each node with the array itself, which was just giving me the first element of the array. Then I found that I need to use strcpy().

I'm not sure what is wrong at this point, but I think it's down to memory allocation because it's giving me a segfault. That is confusing however, because the memory allocation for rach node is already taken care of.

Thank you for any help, this part has been driving me crazy for a few hours now.

#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;
}
Starlncr34
  • 31
  • 1
  • 6

2 Answers2

1

As you stated you are using arrays, space needs to be reserved in the info member of the linked list structure. char type will only hold one character.

struct node {
   char info[SIZE];
   struct node *link;
} *start;

If info is an array, printf requires %s format modifier.

  printf("%s\n", ptr->info);
suspectus
  • 16,548
  • 8
  • 49
  • 57
0

info is a char not a char *. Compile with -W -Wall, you'll see most of your mistakes.

Striped
  • 2,544
  • 3
  • 25
  • 31