链表存储从文件读取的数据

复制代码
 1 #include"getWhitelist_demo.h"
 2 
 3 void Initialize_List(List *l)
 4 {
 5     *l=(List)malloc(sizeof(Node));
 6     (*l)->Next=NULL;
 7 }
 8 
 9 void Insert(ElemType X,List L)
10 {
11     List TmpCell,P=L;
12     TmpCell = (List)malloc(sizeof(Node));
13     TmpCell->Element=(ElemType)malloc(strlen(X)*sizeof(*X));///0001
14     if(TmpCell==NULL)
15         return 0;
16     ///TmpCell->Element=X;error0011
17     strcpy(TmpCell->Element,X);///0002
18     TmpCell->Next=NULL;
19     while(P->Next!=NULL)
20         P=P->Next;
21     P->Next=TmpCell;
22     return 1;
23 }
24 
25 List GetLists(const char* file)
26 {
27     List lst,P;
28     Initialize_List(&lst);
29     FILE * fp;
30     char buf[1024];
31     fp=fopen(file,"rw+");
32     if(!fp)
33         perror("file:");
34     while(fgets(buf,1023,fp)!=NULL)
35     {
36         Insert(buf,lst);
37     }
38     return lst;
39 }
40 
41 void printout(List llst)
42 {
43     Position P;
44     P=llst->Next;
45     while(P!= NULL)
46     {
47         printf("Element: %s",P->Element);
48         P=P->Next;
49     }
50 }
View Code
复制代码
复制代码
 1 #ifndef GETLISTS_DEMO
 2 #define GETLISTS_DEMO
 3 
 4 #include<stdio.h>
 5 #include<string.h>
 6 
 7 typedef char* ElemType;
 8 
 9 typedef struct Node Node;
10 typedef struct Node* List;
11 typedef List Position;
12 struct Node
13 {
14     ElemType Element;
15     List Next;
16 };
17 
18 #endif // GETLISTS_DEMO
View Code
复制代码

今天犯了一个错误,在第一段代码里面是error0001的错误,这里只是“重复性的将指向文件读取的那个字符数组的地址”,这样导致每次将链表打印的时候总是最后一个值。

将error0001换成0001、0002两行之后,问题解决了,因为这样真正的是将所有文件读取的值存储到了链表而不只是重复性的去复制指针地址(而且是一个指针地址)。

posted on   Eton..Bee  阅读(2036)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示