首页技术c语言fread(C语言fread和fwrite函数详解)

c语言fread(C语言fread和fwrite函数详解)

编程之家2026-05-221159次浏览

其实c语言fread的问题并不复杂,但是又很多的朋友都不太了解C语言fread和fwrite函数详解,因此呢,今天小编就来为大家分享c语言fread的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

c语言fread(C语言fread和fwrite函数详解)

C语言fread函数问题

fer, size_t Size, size_t Count, FILE* Stream);

Size:每个要读取的元素的大小,单位字节----第二个参数

Count:要读取的元素个数------------------第三个参数

函数的返回值是实际读出元素的个数。

fwrite的第二和第三个参数及返回值的含义同上。

用fread(temp,1024,1,fp)也能读出,意思是一个元素的大小是1024个字节,每次读取一个,这在读取前面内容时没问题,当读到最后,加入只剩下100个字节的数据,不足1024字节时,程序返回0,你无法知道程序最后一次读出了多少数据。如果用fread(temp,1,1024,fp),则程序每次返回读出数据的字节数,即使读最后100个字节时,也返回100,这样你可以利用返回值知道程序读出了多少数据。

c语言fread(C语言fread和fwrite函数详解)

你程序中用'\0'判断读出数据的结束标志,也是有问题的。mp3文件中本身就有很多NULL字符,用strchr(temp,'\0');返回的指针未必指向读出数据的结束标志,可能指向读出数据中的某位。我实际试验了一下,用这种方法,4M多的1.mp3,最终只能得到800多k的2.mp3。正确的做法是利用fread的返回值作为fwrite的输入。

最终程序修改如下,去除了打印代码:

#include<stdio.h>

#include<string.h>

void main()

{

c语言fread(C语言fread和fwrite函数详解)

FILE*fp;

FILE*fpw;

char temp[1024];

int bsize;

fp=fopen("c:/book/1.mp3","rb");

fpw=fopen("c:/book/2.mp3","wb");

if(fp==NULL)

{

printf("can not open file\n");

}

temp[1023]='\0';

while(!feof(fp))

{

bsize= fread(temp,1,sizeof(temp)-1,fp);

fwrite(temp,1,bsize,fpw);

}

fclose(fp);

fclose(fpw);

}

c语言文件操作fwrite和fread

fread是C语言标准为中的一个函数。它从一个文件流中读数据,最多读取count个元素,每个元素size字节,如果调用成功返回实际读取到的元素个数,如果不成功或读到文件末尾返回 0。

fwrite是C语言标准库中的一个函数,指向文件写入一个数据块。示例如下:

//读取一个完整的文件

#include<stdio.h>

#include<stdlib.h>

intmain()

{

FILE*pFile;//文件指针

longlSize;//用于文件长度

char*buffer;//文件缓冲区指针

size_tresult;//返回值是读取的内容数量

pFile=fopen("myfile.bin","rb");

if(pFile==NULL){fputs("Fileerror",stderr);exit(1);}//如果文件错误,退出1

//获得文件大小

fseek(pFile,0,SEEK_END);//指针移到文件末位

lSize=ftell(pFile);//获得文件长度

rewind(pFile);//函数rewind()把文件指针移到由stream(流)指定的开始处,同时清除和流相关的错误和EOF标记

//为整个文件分配内存缓冲区

buffer=(char*)malloc(sizeof(char)*lSize);//分配缓冲区,按前面的lSize

if(buffer==NULL){fputs("Memoryerror",stderr);exit(2);}//内存分配错误,退出2

//该文件复制到缓冲区

result=fread(buffer,1,lSize,pFile);//返回值是读取的内容数量

if(result!=lSize){fputs("Readingerror",stderr);exit(3);}//返回值如果不和文件大小,读错误

//terminate//文件终止

fclose(pFile);

free(buffer);

return0;

}综合使用的例子。

#include<stdio.h>

intmain()

{

FILE*pFile;

floatbuffer[]={2.0,3.0,8.0};

pFile=fopen("myfile.bin","wb");//打开文件写操作

fwrite(buffer,1,sizeof(buffer),pFile);//把浮点数组写到文件myfile.bin

fclose(pFile);//关闭文件

floatread[3];

pFile=fopen("myfile.bin","rb");//重新打开文件读操作

fread(read,1,sizeof(read),pFile);//从文件中读数据

printf("%f\t%f\t%f

",read[0],read[1],read[2]);

fclose(pFile);//关闭文件

return0;

}

c语言中fread函数怎么用

c语言中fread函数语法为size_tfread(void*restrictbuffer,size_tsize,size_tcount,FILE*restrictstream)。buffer是指向要读取的数组中首个对象的指针,size是每个对象的大小(单位是字节),count是要读取的对象个数,stream是输入流。通过fread函数可进行数据读取,返回成功读取的对象个数。

扩展资料:

fread函数从给定输入流stream读取最多count个对象到数组buffer中(相当于以对每个对象调用size次fgetc),把buffer当作unsignedchar数组并顺序保存结果。流的文件位置指示器前进读取的字节数。

若出现错误,则流的文件位置指示器的位置不确定。若没有完整地读入最后一个元素,则其值不确定,可能小于count。若size或count为零,则fread返回零且不进行其他动作。fread不区分文件尾和错误,因此调用者必须用feof和ferror才能判断发生了什么。

好了,文章到这里就结束啦,如果本次分享的c语言fread和C语言fread和fwrite函数详解问题对您有所帮助,还望关注下本站哦!

零基础编程入门先学什么,成人编程入门先学什么css动画大全(css动画持续时间)