1:使用 fputc 和 fgetc 实现文件的拷贝功能
int main(int argc, const char *argv[])
{
FILE* fp = fopen(argv[1],"r");
FILE* fs = fopen(argv[2],"w");
if(fp==NULL||fs==NULL){
perror("fopen");
return 1;
}
while(1){
unsigned char ch = fgetc(fp);
if(255==ch){break;}
fputc(ch,fs);
}
fclose(fp);
fclose(fs);
return 0;
}

2:将结构体数组的加载保存的代码,把结构体数组改成链表再来一次
typedef struct Node
{
union
{
int len;
int data;
};
struct Node *next;
}Link,*LinkPtr;
//创建链表
LinkPtr Link_create()
{
LinkPtr H = (LinkPtr)malloc(sizeof(Link));
if(NULL == H){
return NULL;
}
H->len = 0;
H->next = NULL;
return H;
}
//判空
int empty(LinkPtr H)
{
if(NULL==H){
return -1;
}
return H->len == 0;
}
//头插
int addin(LinkPtr H,int e)
{
if(NULL == H){
return 0;
}
LinkPtr p = (LinkPtr)malloc(sizeof(Link));
p->data=e;
p->next=H->next;
H->next=p;
H->len++;
return 1;
}
//遍历
void show(LinkPtr H)
{
if(NULL == H || empty(H))
{
printf("链表不存在\n");
return;
}
LinkPtr q = H;
for(int i=0;i<H->len;i++)
{
q=q->next;
printf("%d ",q->data);
}
printf("\n");
}
int main(int argc, const char *argv[])
{
//链表初始化
LinkPtr H=Link_create();
addin(H,10);
addin(H,20);
addin(H,30);
addin(H,40);
addin(H,50);
addin(H,60);
addin(H,70);
show(H);
FILE* fp = fopen(argv[1],"w");
//将链表数据写入文件
if(fp==NULL){
perror("fopen");
return 1;
}
LinkPtr p = H->next;
while(p!=NULL){
fprintf(fp,"%d ",p->data);
p=p->next;
}
//删除链表
LinkPtr q = H->next;
while(H->next !=NULL)
{
H->next = q->next;
free(q);
q=H->next;
}
free(H);
H=NULL;
q=NULL;
show(H);
fclose(fp);
FILE* fs = fopen(argv[1],"r");
if( fs==NULL){
perror("fopen");
return 1;
}
//读取文件
LinkPtr G=Link_create();
while(1)
{
LinkPtr x = (LinkPtr)malloc(sizeof(Link));
fscanf(fs,"%d ",&x->data);
x->next=G->next;
G->next=x;
G->len++;
if(feof(fs)==1){break;}
}
show(G);
fclose(fs);
return 0;
}
