c - c 中的链表(我在这里做错了什么?)

标签 c linked-list

我有这段代码,但我不明白为什么它不起作用? 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;
    }
}

最佳答案

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

关于c - c 中的链表(我在这里做错了什么?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18945776/

相关文章:

c - C 中的线性间隔数组

C 整数数组排序

java - 如何在 Java 中创建链表数据结构?

java - 打印链表最有效的方法是什么?

创建一个链表来注册 C 学生

java - 在 O(1) 中将链表添加到另一个链表

c - fopen() 在 win32 上的性能

为已经退出的线程调用 pthread_detach?

c - 有没有办法提供一个宏函数来返回不同类型的值,包括什么都没有?

java - 降序ListNode迭代器实现