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 '结尾,以避免越界访问。
最后更新于 2023-10-08 23:43:30 并被添加「」标签,已有 位童鞋阅读过。
本站使用「署名 4.0 国际」创作共享协议,可自由转载、引用,但需署名作者且注明文章出处
相关文章