1

我可能又错过了一些非常简单的东西,但是在实验室里呆了太多时间让我看不出我在这里做错了什么。我正在尝试通过创建一个列表并将新节点附加到它作为从文件中读取的所有字符的链接列表,因为新字符被读入直到文件末尾。

首先是一些背景知识,这是节点结构的代码:

typedef struct node
{
//each node holds a single character
char data;
//pointer to the next node in the list
struct node *next;
}node;

通过使用几个 printf 语句,我设法将问题缩小到此代码块中的某个地方。

FILE *infile = fopen("data.txt", "r");

int c;
int counter = 0;
node *head, *current = NULL;

//Get the count of our original rules and create the list
do{

   node *item = new node();

  c = fgetc(infile);      

  if(c == '\n'){
counter ++;
  }

  printf("From infile: %c \n", c);

item->data = c; 
item->next = NULL;

printf("Item data: %c", item->data);

if (head == NULL){
  head  = current =  item;
}
else {    
  current->next = item;
  current = item;
}

}while( c != EOF);

我不确定它在哪里,但我知道它在里面。如果我能用另一双眼睛指出哪里出了问题,我将不胜感激。

4

1 回答 1

3

您不在head这里初始化:

node *head, *current = NULL;

所以它会有一个不确定的值,所以很可能这个检查失败了:

if (head == NULL){

因此headcurrent都不会被正确初始化。

如果您使用的是C++11,那么您应该使用nullptr而不是NULL.

于 2013-10-15T19:17:38.440 回答