创建一个链表,用标准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;
}
相关推荐
凡人叶枫4 小时前
Effective C++ 条款17:以独立语句将 newed 对象置入智能指针
java·linux·开发语言·c++·算法
RisunJan4 小时前
Linux命令-pgrep (通过进程名查找进程 ID)
linux·运维
信创工程师-小杨5 小时前
Linux内网环境如何解决依赖的问题
linux·运维·服务器
设计师小聂!5 小时前
宝塔 Linux 面板保姆级教程
linux·mysql·开源·运维开发
菜鸟‍5 小时前
LeetCode 1 27 和 704 || 两数之和 移除元素 二分查找
算法·leetcode·职场和发展
不吃土豆的马铃薯5 小时前
C++ 高性能网络缓冲区 Buffer 源码解析
linux·服务器·开发语言·网络·c++
java知路5 小时前
linux yum 下载docker安装包及依赖安装包,并离线安装
linux·运维·docker
fanged5 小时前
设备树学习2--一个DTBO实验
linux·嵌入式开发
caimouse5 小时前
Reactos 第1章 概述
c语言·开发语言·架构
星间都市山脉6 小时前
Android STS(Security Test Suite)完整介绍与测试流程
android·java·linux·windows·ubuntu·android studio·androidx