0

我有这段代码,但我不知道为什么这不起作用?inputData() 函数似乎可以工作,但 print 方法只打印我发送给 inputDate() 的第一行,因为我输入了尽可能多的行。

我正在从文件中读取,一次一行,然后放入链接列表,这就是问题所在。如果我在代码中传递值,那么没有问题吗?

//LINKED LIST
void inputData(char *l)
{
    struct lines *pNewStruct = (struct lines *) malloc(sizeof(struct lines));
    pNewStruct->line = l;

    //inserts if list empty, next set to null
    if(pFirstNode == NULL){
        pNewStruct->next = NULL;
        pFirstNode = pLastNode = pNewStruct;

    } else {

        //inserts if list contains one element
        //this is done to differentiate between first and last node
        if(pFirstNode == pLastNode) {
            pFirstNode->next = pNewStruct;
            pLastNode = pNewStruct;
            pNewStruct->next = NULL;

        //inserts elements when elements in list > 2
        } else {
            pLastNode->next = pNewStruct;
            pNewStruct->next = NULL;
            pLastNode = pNewStruct;

        }
    }
}

void printData()
{
    struct lines *temp = pFirstNode;

    while(temp != NULL)
    {
        printf("%s", temp->line);
        temp = temp->next;
    }
}
4

2 回答 2

3

对于每一行,您应该动态分配新内存并将每行的内容复制到新分配的字符串中。否则,如果没有人跟踪为这些字符串分配的内存,或者这些字符串在堆栈上,您将面临丢失它们的风险。

于 2013-09-22T16:07:35.747 回答
-1

pNewStruct->line = l;

这不行。而且我们永远看不到 pFirstNode 到底是什么。

那么如何使用 strcpy 来复制字符。

然后是else中的两个分支。为什么你认为你需要它们。您在添加第一个元素时启动指针。所以这个 pFirstNode->next = pNewStruct;

在第一种情况下与 pLastNode->next = pNewStruct; 相同

因此,外部 else 中不需要另一个 if else 分支。

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

struct lines {
  char line [120];
  struct lines *next;
};

struct lines *pFirstNode = NULL;
struct lines *pLastNode = NULL;


//LINKED LIST
void inputData(char *l)
{
    struct lines *pNewStruct = (struct lines *) malloc(sizeof(struct lines));
    strncpy(pNewStruct->line,l,119);


    //inserts if list empty, next set to null
    if(pFirstNode == NULL){
        pNewStruct->next = NULL;
        pFirstNode = pLastNode = pNewStruct;

    } else {
      pLastNode->next = pNewStruct;
      pNewStruct->next = NULL;
      pLastNode = pNewStruct;
    }      
}

void printData()
{
    struct lines *temp = pFirstNode;

    while(temp != NULL)
    {
        printf("%s", temp->line);
        temp = temp->next;
    }
}


int main(void) {
  inputData("one");
  inputData("two");
  inputData("three");
  printData();
  return 0;
}
于 2013-09-22T16:22:41.053 回答