c语言中的Fread返回值

Fgetc():返回成功读取的字节数。返回EOF如果出现错误或文件结束;

Fputc():返回成功写入的字节数。返回EOF如有错误;

Fgets():成功返回字符串地址,返回NULL读数错误或为0时;

Fputs():成功时返回非负整数,错误时返回EOF。

Fprintf():成功时返回写入的字节数,错误时返回负值。

Fscanf():返回正确读取的项目数,如果有错误,则返回EOF。

Fwrite():返回正确写入的项目数,如果有错误则返回0。

Fread():返回正确读取的项目数,如果有错误则返回0。

Fseek():成功返回0,错误返回-1。

C语言中的函数问题 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,所以使用返回值就可以知道程序读取了多少数据。

在你的程序中使用' \0 '来判断读取数据的结束也是有问题的。mp3文件本身有许多空字符,所以使用strcr (temp,' \ 0 ')。返回的指针不一定指向读取数据的结束标记,而是可以指向读取数据中的一个位。我真的试过了。用这种方法,用4M多的1.mp3,我最后只能得到800k多的2.mp3。正确的做法是用fread的返回值作为fwrite的输入。

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

#包含stdio.h

#包含字符串. h

void main()

{

FILE * fp

FILE * fpw

炭化温度[1024];

int bsize

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

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

if(fp==NULL)

{

printf("无法打开文件\ n ");

}

temp[1023]= ' \ 0 ';

而(!feof(fp))

{

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

fwrite(temp,1,bsize,fpw);

}

fclose(FP);

fclose(fpw);

}

C语言中的Fread()总是返回0。 1.返回0通常意味着读取文件的结尾。如果确认不在文件末尾,可以用ferror检查错误。

if ( ferror ( fp ) ){

printf("文件读取错误。");

}

2.在C语言中:fread是一个函数。要从文件流中读取数据,最多读取count个元素,每个元素有一个大小字节。如果调用成功,则返回实际读取的元素数,如果调用不成功或读取到文件末尾,则返回0。

函数原型:size _ tfraed (void * buffer,size _ t size,size _ t count,file * stream);

参数:

缓冲区用来接收数据的内存地址。

要读取的每个数据项的字节数,以字节为单位。

统计要读取的数据项的数量,每个数据项的大小为字节。

指向流输入流的指针

返回值:

返回实际读取的元素数量。如果返回值与计数不同,则可能是文件结束或出错。从ferror和feof获取错误消息,或者检查是否已到达文件末尾。

示例:

# includestdio.h

#includestring.h

int main(void)

{

文件*流;

char msg[]= "这是一个测试";

char buf[20];

if((stream=fopen("DUMMY。FIL "," w "))==NULL)

{

fprintf(stderr,"无法打开outputfile。\ n ");

返回0;

}

fwrite(msg,1,strlen(msg) 1,stream);

fseek(stream,0,SEEK _ SET);

fread(buf,strlen(msg) 1,1,stream);

printf("%s\n ",buf);

fclose(流);

return0

}

fwrite()函数和fread()函数分别有多少个返回值?它们是什么意思?(c语言) 类别:计算机/网络编程其他编程语言

分析:

Fwrite(将数据写入文件流)

相关函数fopen,fread,fseek,fscanf

头文件# includesdio.h

定义函数size _ t fwrite (constvoid * ptr,size _ t size,size _ t nmemb,file * stream);

函数描述fwrite()用于将数据写入文件流。参数stream是指向打开文件的指针,参数ptr指向要写入的数据地址,写入的字符总数由参数size*nmemb决定。Fwrite()返回实际写入的nmemb的数量。

返回值返回实际写入的nmemb的数量。

示例# includesdio.h

#define set_s (x,y) {strcoy(s[x])。姓名,y);s[x]。size = strlen(y);}

#定义nmemb 3

结构测试

{

char name[20];

int大小;

} s[nmemb];

主()

{

文件*流;

set_s(0," Linux!");

set_s(1," FreeBSD!");

set_s(2," Windows2000。");

stream=fopen("/tmp/fwrite "," w ");

fwrite(s,sizeof(struct test),nmemb,stream);

fclose(流);

}

执行引用fread()。

从文件流中读取数据

相关函数fopen、fwrite、fseek、fscanf

头文件# includesdio.h

定义函数size _ tfraed (void * ptr,size _ t size,size _ t nmemb,file * stream);

函数描述fread()用于从文件流中读取数据。参数stream是指向打开文件的指针,参数ptr指向要读入的数据空间,读取的字符数由参数size*nmemb决定。Fread()将返回实际读取的nmemb的数量。如果该值小于参数nmemb,则意味着文件的结尾可能被读取或发生错误。在这种情况下,必须使用feof()或ferror()来确定发生了什么。

返回值返回实际读取的nmemb的数量。

附加说明

示例# includesdio.h

#定义nmemb 3

结构测试

{

char name[20];

int大小;

} s[nmemb];

主()

{

文件*流;

int I;

stream = fopen("/tmp/fwrite "," r ");

fread(s,sizeof(struct test),nmemb,stream);

fclose(流);

for(I = 0;inmemb我)

printf(" name[% d]= %-20s:size[% d]= % d \ n ",I,s[i]。名字,我,s[i]。尺寸);

}

执行名[0]=Linux!大小[0]=6

name[1]=FreeBSD!尺寸[1]=8

name[2]=Windows2000 size[2]=11

c语言,fread返回值相关操作 Fread返回实际读取的字节数。最后用str_buf[filelen]=0来保证str_buf中的内容在作为字符串处理时必须以' \0 '结尾,以避免越界访问。

相关文章

发表新评论