c语言fread malloc,流操作之读写(fread、fwrite、fopen、malloc)

fgets、fread函数

fwritre函数

文件结束函数

错误指示函数

#include

#include

int main(int arge,char **argv)

{

int ret=-1;

//拷贝 源文件(source.c)到目标文件(dst.c)

FILE *fp_s=NULL;//源文件流

fp_s=fopen("source.c","r");//只读该文件 r

if(NULL==fp_s)

{

perror("fopen source.c");

return -1;

}

//目的文件

FILE *fp_d=NULL;//目标文件流

fp_d=fopen("dst.c","w");

if(fp_d==NULL)

{

perror("fopen dst.c");

return -1;

}

//准备内存

char *buff=NULL;

buff=malloc(20);//堆 20个字节

if(NULL==buff){

perror("malloc buff");

return -1;

}

//读

//文件,内存地址,读多少内容

//给读函数提供的信息:读的文件的名称,读到那去,读多少,从哪里开始读。

//从源文件的默认光标(文件位置处)

//存放到用户内存里面

while(1)

{

ret= fread(buff,1,20,fp_s);

if(20>ret)

{

//读到source.c文件的尾部

if(feof(fp_s))

{

ret=fwrite(buff,1,ret,fp_d);

if(0==ret)

{

perror("fwrite");

return -1;

}

break;

}else{

//出错

perror("fread");

return -1;

}

}

//写

ret=fwrite(buff,1,ret,fp_d);

if(0==ret){

perror("fwrite");

return -1;

}

}

free(buff);

buff=NULL;

fclose(fp_d);

fp_d=NULL;

fclose(fp_s);

fp_s=NULL;

return 1;

}

详解这个函数的返回值:

RETURN VALUE

fread()  and  fwrite()

return  the  number of items successfully read or written (i.e., not the number of characters).

If an error occurs, or the end-of-file is reached, the return value is ashort item count (or zero).

如果成功返回就是item,如果错误返回就是short item,如果end-of-file就返回zero。

The  function  feof()

tests the end-of-file indicator for the stream pointed to by stream, returning non-zero if it is set.  The end-of-file indicator can only be cleared by the function clear- err().

The function ferror()

tests the error indicator for the stream pointed to by stream, returning non-zero if it is set.  The error indicator can only be reset by the clearerr() function.

fread函数的返回值就三种:item,short item,zero。不是item这种情况,就是short item和zero这两种情况,

ret= fread(buff,1,20,fp_s);

if(20>ret)

{

//读到source.c文件的尾部

if(feof(fp_s))

{

ret=fwrite(buff,1,ret,fp_d);

if(0==ret)

{

perror("fwrite");

return -1;

}

break;

}else{

//出错

perror("fread");

return -1;

}

}

执行程序:

gcc mycopy.c -g

./a.out

gdb a.out

b main(在main函数处设置断点)

r运行

n

n

p fp_s(显示)

p fp_d

s

p buff

总结:

第一步:打开文件(fopen)

FILE *fp_s=NULL;//源文件流 fp_s=fopen("source.c","r");//只读该文件 r

第二步:准备内存空间

buff=malloc(20);//堆 20个字节

第三步:

进行读写操作。

ret=fwrite(buff,1,ret,fp_d);

ret= fread(buff,1,20,fp_s);

第四步:关闭数据流,释放内存

第一是:逻辑思维(有计算机执行决定)

第二是:需要用到的函数(熟悉函数的用法)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值