创建一个链表,用标准io读取文件数据插入链表,读取链表数据插入另一个文件

head.h

cs 复制代码
#ifndef __HEAD_H__
#define __HEAD_H__
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/stat.h>
#include<sys/types.h>
#include<fcntl.h>
#include<pthread.h>
#include<sys/wait.h>
#include<signal.h>
typedef char datatype[128];
typedef struct node{
	union{
		int len;
		datatype data;
	};
	struct node* next;
}*linklist;

linklist create_head();
linklist create_linknode(datatype key);
int  insert(linklist L,datatype key);
int out_file(FILE*fp_w,linklist L);
void mfree(linklist*L);
#endif

fun1.c

cs 复制代码
#include"head.h"
linklist create_head(){
	linklist L=(linklist)malloc(sizeof(struct node));
	if(NULL==L){
		printf("申请空间失败\n");
		return NULL;
	}
	L->len=0;
	L->next=NULL;
	return L;
}

linklist create_linknode(datatype key){
	linklist p=(linklist)malloc(sizeof(struct node));
	if(NULL==p){
		printf("申请空间失败\n");
		return NULL;
	}
	strcpy(p->data,key);
	p->next=NULL;
	return p;
}
int  insert(linklist L,datatype key){
	if(NULL==L){
		printf("传参失败\n");
		return -1;
	}
	linklist f=L;
	while(f->next!=NULL){
		f=f->next;
	}
	linklist p=create_linknode(key);
	if(p==NULL){
		printf("创建节点失败\n");
		return -1;
	}
	f->next=p;
	(L->len)++;
	return 0;
}
int out_file(FILE*fp_w,linklist L){
	linklist p=L->next;
	for(int i=0;i<L->len;i++){
		if(fprintf(fp_w,"%s",p->data)<0){
			perror("fprintf");
			return -1;
		}
		p=p->next;
	}
	return 0;
}
void mfree(linklist*L){
    if(NULL==L||NULL==*L){
        printf("传参无效\n");
        return ;
    }
    linklist p=*L;
    while(p==NULL){
        linklist pn=p;
        free(p);
        p=pn->next;
     }
    *L=NULL;
}

main.c

cs 复制代码
#include"head.h"

int main(int argc, const char *argv[])
{
	static char buf[128];
	 FILE*fp_r=fopen("../standard_io/cpy_f.c","r"); 
	if(fp_r==NULL){
		perror("fopen");
		return -1;
	}
	 FILE*fp_w=fopen("./1.c","w");
	if(fp_w==NULL){
		perror("fopen");
		return -1;
	}
	linklist L=create_head();
	while(1){
		if(fscanf(fp_r,"%s",buf)==-1){
			break;
		}
		insert(L,buf);

	}
	printf("文件读取完成\n");
	out_file(fp_w,L);
	printf("文件写入完成\n");
    mfree(&L);
	fclose(fp_r);
	fclose(fp_w);
	return 0;
}
相关推荐
会员源码网11 小时前
使用`mysql_*`废弃函数(PHP7+完全移除,导致代码无法运行)
后端·算法
木心月转码ing11 小时前
Hot100-Day10-T438T438找到字符串中所有字母异位词
算法
HelloReader12 小时前
Wi-Fi CSI 感知技术用无线信号“看见“室内的人
算法
颜酱15 小时前
二叉树分解问题思路解题模式
javascript·后端·算法
qianpeng89716 小时前
水声匹配场定位原理及实验
算法
Johny_Zhao1 天前
OpenClaw安装部署教程
linux·人工智能·ai·云计算·系统运维·openclaw
董董灿是个攻城狮1 天前
AI视觉连载8:传统 CV 之边缘检测
算法
RuoZoe1 天前
重塑WPF辉煌?基于DirectX 12的现代.NET UI框架Jalium
c语言
AI软著研究员1 天前
程序员必看:软著不是“面子工程”,是代码的“法律保险”
算法
FunnySaltyFish1 天前
什么?Compose 把 GapBuffer 换成了 LinkBuffer?
算法·kotlin·android jetpack