C语言从文件打开链表,要用指针

C语言从文件打开链表,要用指针,第1张

当把链表已经确定的时候,就可以依次存入文件

和平时链表的遍历一样,每读取一个节点内容就进行一次存入 *** 作。

不过要注意几个部分的检查:

内存空间是否分配成功

是否成功存入到文件中

在工作完成之后,是否将以后不会用到的变量清空和删除。

按照问题要求的代码如下:

Consumer* read_list()

{

FILE *fp

if ((fp = fopen("CONSUMER.dat", "rb")) == NULL)

{

printf("无法读取 CONSUMER.dat\n")

return NULL

}

int sign

Consumer *s,*p,*head

head= (Consumer*)malloc(SIZE_C)

if (head == NULL)

{

printf("读取失败!内存空间申请不足!\n"缓手)

return NULL

}

fseek(fp, 0, SEEK_END)

if (ftell(fp) == 0)

{

return NULL

}

p = head

p->next = NULL

while (feof(fp))

{

s = (Consumer*)malloc(SIZE_C)

//fread(s, SIZE_C, 1, fp)

fread(s, sizeof(char), SIZE_C, fp)

p->next = s

p = s

p->next = NULL

}

fclose(fp)

return head

}//读取文件到链表

int save_consumer(Consumer *p)

{

FILE *fp

Consumer *head

head = p//p为已经构建好的链表

//if ((fp = fopen("CONSUMER.dat", "ab+")) == 迹正NULL)

if ((fp = fopen("CONSUMER.dat", "wb")) == NULL)

{

printf("无法打开 CONSUMER.dat!\n")

return -1

}

while (p != NULL)

{

//fwrite(p, SIZE_C, 1, fp)

fwrite(p, sizeof(char), SIZE_C, fp)

p = p->next

}

fclose(fp)

return 1

}//储扰州嫌存链表到文件

错误地方:

将fwrite(q,sizeof(STU),10,fp)改为

fwrite((char *)q,sizeof(STU),10,fp)就可以了

我都已经测试通过了差配.

是不是你在读没冲取文件的时候方法不对.我是按如下方法读取的

int fd

fd = open("STUDENT.TXT", O_RDONLY)

char buf[256]

int len

memset(buf, 0, 256)

len = read(fd, buf, 256)

ST stmemset((char *)&st, 0, sizeof(ST))

memcpy((char *)&st, buf, len)

close(fd)

下面虚察指为运行结果:

Please input number of node:1

Input date:

Please input information like this:060229 wenbiao 99 98 97

input num:23

input name:wwwww

input Chinese:1

input English:2

input Math:3

读取出来的结果为p st

$1 = {num = "23\000\000", name = "pengsong\000", Chinese = 1, English = 2, Math = 3, next = 0x0}

完全正确

指针p指向一个指定空间的地址(指针类型和所指向的空间类型要相同,比如说int类型指针指孝裤向int类型数据,结构体指针指向对应的malloc申请的空间) p是指散弯向数据冲慎闷空间对应的地址

free(p)是释放掉malloc申请的空间,但是p指向的地址不会变,要想改变p的指向 必须给它重新赋值


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12231530.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-22
下一篇 2023-05-22

发表评论

登录后才能评论

评论列表(0条)

保存