c - fscanf 返回值和链表
问题描述
这是我的代码的一部分。
while(1)
{
struct client* newnode = malloc(sizeof(client));
if(head->next != NULL)
{
newnode = newnode -> next;
}
if(head->next == NULL)
{
newnode->next = head->next;
head->next=newnode;
}
ReadEOF = fscanf(fp1,"%d %s %s %s %s\n",&(newnode->ID),newnode->PW,newnode->NAME,newnode->ADDRESS,newnode->PNUM);
if((ReadEOF)!= 5)
{
break;
}
++NumofClient;
printf("%d",NumofClient);
} //make newnodes
这些代码是在循环之前编写的。
struct client* head=malloc(sizeof(client));
head->next = NULL;
int NumofClient = 0;
int ReadEOF;
这是结构客户端。
typedef struct client{
int ID;
char PW[100],NAME[100],ADDRESS[100],PNUM[100];
struct client* next;
}client;
这是client.txt 文件。
123 aa aa aa aa aa
234 bb bb bb bb bb
567 cc cc cc cc cc
我预计 NumofClient 的值为 3。
但是我发现当 NumofClient 的值为 1 时程序退出了循环。
这意味着 fscanf 函数的返回值在第二次尝试时不是 5。
或者,在链表实现过程中是否发生了错误?
如果你需要,我很乐意在评论中写下完整的代码
解决方案
您正在覆盖(内存泄漏)并将垃圾(非初始化值)分配给新节点:
if(head->next != NULL)
{
newnode = newnode -> next;
}
我想你想要
newnode->next = head;
head = newnode;
推荐阅读
- javascript - 从 Pug 中的字符串插入新行
- asp.net-mvc - ASP.NET Core MVC 在不使用 Http 请求的情况下使用内部 Web API
- java - 春季启动MVC。传递空请求正文
- python - 如何将BERT的网络输出转换为可读文本?
- jenkins - 当我尝试使用 poll mailer 插件读取我的收件箱并触发构建时,jenkins 中抛出 javax.mail.messaging 异常连接超时错误
- arduino - 当输出模式设置为 LOW 时 LED 不会关闭
- spring-boot - Spring-Boot 在 Logback 中包含构建信息作为 SpringProperty
- python - Apache Nifi:我想将我的数据 CSV 提取到 Elasticsearch,而不使用 apache nifi 将其流式传输到其他处理器
- python - 为任何用户将特定图像从一个文件夹复制到另一个文件夹
- git - 检查本地和远程分支差异的有效方法