将字符串插入链接列表

时间:2013-10-30 00:51:05

标签: c string linked-list

我正在尝试编写一个程序,该程序从用户输入中获取一个句子并将其存储在链接列表中。这是我到目前为止所做的,它似乎工作,除了当我打印列表时,它打印字符串,然后进入无限循环打印“垃圾”。你能看出我哪里出错吗?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define STRLENGTH 100

typedef struct node {
   char data;
   struct node *next;
} node;

int
main(void) {
   char str[STRLENGTH];
   printf("Enter a string: ");
   gets(str);

   node *linkedList = NULL;
   node *head = NULL;
   node *pre = NULL;

   int i;
   for(i = 0; str[i] != '\0'; i++) {
      linkedList = malloc(sizeof(node));
      if(str[i] == ' ')
         linkedList -> data = 0;
      else
         linkedList -> data = str[i];

      if(pre != NULL)
         pre -> next = linkedList;
      else
         head = linkedList;
      pre = linkedList;
   }

   while(head != NULL) {
      printf("%c", head -> data);
      head = head -> next;
   }

   return 0;
}

2 个答案:

答案 0 :(得分:2)

您忘记初始化linkedList -> next,因此它有一个垃圾值,不一定是NULL。因此while循环尝试跟随它并访问一些随机内存地址(由head -> next指向)并导致未定义的行为

在附录中,不要使用gets,它不能防止溢出。请改用fgets

答案 1 :(得分:0)

您的错误仅发生在for循环的最后一次迭代中。你没有初始化linkedList中最后一个元素的下一个指针。

如果您想减少正在进行的操作次数。在执行for循环之后和while循环之前添加

pre->next = NULL;

因为您知道pre将指向最终节点。这样,你不会在循环的每次迭代中都这样做。