创建一个链表,用标准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;
}
相关推荐
复杂网络1 小时前
多个 Claude Code 与多个 Codex 协同工作:设计与实现方案
算法
orion5713 小时前
Missing Semester Class1:course overview and introduction of shell
linux
apocelipes15 小时前
常用编程语言和库的正则表达式性能对比
c语言·c++·python·性能优化·golang·开发工具和环境
HjhIron17 小时前
面试常客:字符串算法从入门到进阶
算法·面试
吴佳浩18 小时前
DeepSeek DSpark:Confidence-Scheduled Speculative Decoding 技术解析
人工智能·算法·deepseek
用户1204872216119 小时前
Linux驱动编译与加载
linux·嵌入式
触底反弹19 小时前
🧠 搞懂 Token,才算真正入门大模型——从分词原理到 Embedding 语义实战
javascript·人工智能·算法
vivo互联网技术1 天前
ICLR 2026 | 基于后验采样的图像恢复方法LearnIR:人脸去阴影、去雾
人工智能·算法·aigc
浮生望1 天前
JS字符串与回文算法:从包装类到双指针的面试进阶之路
javascript·算法
用户805533698031 天前
Input 子系统架构:Core、Handler、Driver 三层是怎么协作的
linux·嵌入式