Создать простой список из строк - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Пытаюсь создать простенький список из строк. Не пашет. Что я делаю не так?
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <malloc.h>
#define m 51
 
struct sent{
  char *str;
  struct sent *next;           
};
 
void create_node (struct sent *h, char *info){
      struct sent *n/* = malloc (sizeof(struct sent))*/;
      if (h == NULL) h->next = n;
          else {
             n = h;  
             while (n != NULL) n = n->next;
          }
     // n = realloc (n, sizeof(sent)*(1 + strlen (info)));    
      n->str = strdup (info);     
}
 
char dialog (struct sent *h, char* str){
     char d;
     if (h != NULL)
       printf ("Proceed? (y/n)\n");
     create_node (h, str);
     d = getch();
     return d;
}
 
void clr_mem (struct sent *h){
     struct sent *tmp;
     while (h != NULL) {
           tmp = h;
           h = h->next;
           free (tmp);
     }
}
     
int main () {
  struct sent *head = NULL;
  char c = 'y';
  char *s = malloc (m); 
  printf("Put some text here: \n");
  while (c == 'y') {
        scanf ("%s", s);
        c = dialog  (head, s);  
  }
  
  clr_mem (head);
  getch ();
  return 0;    
}

Решение задачи: «Создать простой список из строк»

textual
Листинг программы
/*...*/
struct sent
{
   char* str;
   struct sent* next;
};
 
void create_node(struct sent** h, char* info)
{
   /*...*/
   n->str = strdup(info);
   /*...*/
}
 
/*...*/
void clr_mem(struct sent* h)
{
   struct sent* tmp;
   while (h != NULL)
   {
      tmp = h;
      h = h->next;
      free(tmp);
   }
}
/*...*/

Объяснение кода листинга программы

  1. Структура sent объявлена с полями str и next.
  2. Функция create_node принимает указатель на голову списка и строку. Создает новый узел, указывает на него next предыдущего узла и сохраняет строку в новом узле.
  3. Функция clr_mem принимает указатель на голову списка и освобождает память, начиная с первого узла и до последнего.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.25 из 5
Похожие ответы