fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. struct data {
  6. char *name;
  7. struct data *next;
  8. };
  9.  
  10. static struct data *alloc_data(char *name)
  11. {
  12. struct data *data;
  13.  
  14. data = calloc(1, sizeof(*data));
  15. if (data == NULL)
  16. return NULL;
  17.  
  18. data->name = calloc(1, strlen(name));
  19. if (data->name == NULL)
  20. goto err;
  21.  
  22. strcpy(data->name, name);
  23. data->next = NULL;
  24. return data;
  25.  
  26. err:
  27. free(data);
  28. return NULL;
  29. }
  30.  
  31. static void free_data(struct data *data)
  32. {
  33. free(data->name);
  34. free(data);
  35. }
  36.  
  37. static struct data *append_list(struct data *list, char *name)
  38. {
  39. struct data *top;
  40.  
  41. if (list == NULL) {
  42. list = alloc_data(name);
  43. return list;
  44. }
  45.  
  46. top = alloc_data(name);
  47. top->next = list;
  48. return top;
  49. }
  50.  
  51. static void free_list(struct data *list)
  52. {
  53. while (list != NULL) {
  54. struct data *data = list->next;
  55. free_data(list);
  56. list = data;
  57. }
  58. }
  59.  
  60. static void print_list(struct data *list)
  61. {
  62. while (list != NULL) {
  63. printf("%s\n", list->name);
  64. list = list->next;
  65. }
  66. }
  67.  
  68. int main(void)
  69. {
  70. struct data *list;
  71. int i;
  72. char *buffer;
  73.  
  74. buffer = calloc(1, 128);
  75. if (buffer == NULL)
  76. return 1;
  77.  
  78. list = NULL;
  79. for (i = 0; i < 10; i++) {
  80. memset(buffer, 0, 128);
  81. scanf("%127s", buffer);
  82. list = append_list(list, buffer);
  83. }
  84.  
  85. print_list(list);
  86.  
  87. free_list(list);
  88. free(buffer);
  89.  
  90. return 0;
  91. }
  92.  
Success #stdin #stdout 0s 1924KB
stdin
Standard input is empty
stdout