百度
360搜索
搜狗搜索

c语言中fread是什么意思,c语言中fgets 、fputs、fread、fscanf、fseek的区别和作用详细介绍

本文目录一览: c语言文件操作fwrite和fread

无语的写法..
你根本分不清什么事数字 什么事字符
如果你要输出txt里面的内容比较简单.
char buf[1024];
fread(&stud[j],sizeof(struct student),1,fp1);
改成
fread(buf,1024,1,fp1);
printf 改成 printf(%s, buf);
如果你要把 txt里面的字符变成数据.
那就需要解析txt了
读了你的代码,我觉得,你在用fread的时候,其实你的意图是想将1.txt中的每一行按照你所定义的structure student中的字段格式,进行读取,将你的stud一个一个填充好。很遗憾,fread并不能做这件事情。fread会将1.txt中的每行看做一整个字符串,写到你给的每个&stud[j]开头的地址空间中,而无视你所给定的structure的定义,自然你printf就得不到预想的结果了。而fwrite倒是可以原原本本将写入的字串回写出来。
如果你想要按structure的格式读入1.txt的数据,那么就要用scanf咯。就像printf那样,scanf的用法你一定是懂的。
fread是C语言标准为中的一个函数。它从一个文件流中读数据,最多读取count个元素,每个元素size字节,如果调用成功返回实际读取到的元素个数,如果不成功或读到文件末尾返回 0。
fwrite是C语言标准库中的一个函数,指向文件写入一个数据块。示例如下:
//读取一个完整的文件#include

#include

int main(){ FILE* pFile; //文件指针 long lSize; // 用于文件长度 char* buffer; // 文件缓冲区指针 size_t result; // 返回值是读取的内容数量 pFile = fopen("myfile.bin" , "rb"); if (pFile == NULL) {fputs("File error", 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("Memory error", stderr); exit(2);} // 内存分配错误,退出2 // 该文件复制到缓冲区 result = fread(buffer, 1, lSize, pFile); // 返回值是读取的内容数量 if (result != lSize) {fputs("Reading error", stderr); exit(3);} // 返回值如果不和文件大小,读错误 // terminate // 文件终止 fclose(pFile); free(buffer); return 0;}综合使用的例子。

#include

int main(){ FILE* pFile; float buffer[] = { 2.0 , 3.0 , 8.0 }; pFile = fopen("myfile.bin" , "wb"); // 打开文件写操作 fwrite(buffer , 1 , sizeof(buffer) , pFile); // 把浮点数组写到文件 myfile.bin fclose(pFile); // 关闭文件 float read[3]; pFile = fopen("myfile.bin" , "rb"); // 重新打开文件读操作 fread(read , 1 , sizeof(read) , pFile); // 从文件中读数据 printf("%f\t%f\t%f\n", read[0], read[1], read[2]); fclose(pFile); // 关闭文件 return 0;}

c语言中fgets 、fputs、fread、fscanf、fseek的区别和作用

fgets()从文件读取一个字符串
fputs()将一个字符串输出到文件
fread()从文件以二进制方式读取数据
fscanf()是scanf()的文件版本
fseek()将文件指针定位到文件中需要的位置
fread:是读取数据
fwrite:是写入数据
1.函数功能
用来读写一个数据块。
2.一般调用形式
fread(buffer,size,count,fp);
fwrite(buffer,size,count,fp);
3.说明
(1)buffer:是一个指针,对fread来说,它是读入数据的存放地址。对fwrite来说,是要输出数据的地址。
(2)size:要读写的字节数;
(3)count:要进行读写多少个size字节的数据项;
(4)fp:文件型指针。
注意:1
完成次写操(fwrite())作后必须关闭流(fclose());
2
完成一次读操作(fread())后,如果没有关闭流(fclose()),则指针(file
*
fp)自动向后移动前一次读写的长度,不关闭流继续下一次读操作则接着上次的输出继续输出;
3
fprintf()

按格式输入到流,其原型是int
fprintf(file
*stream,
const
char
*format[,
argument,
...]);其用法和printf()相同,不过不是写到控制台,而是写到流罢了。注意的是返回值为此次操作写入到文件的字节数。如int
c
=
fprintf(fp,
"%s
%s
%d
%f",
str1,str2,
a,
b)
;str1:10字节;str2:
10字节;a:2字节;b:8字节,c为33,因为写入时不同的数据间自动加入一个空格。
4.fscanf

scanf
相似
:当能正常读入数据时,
fscanf
返回读入数据的个数,否则返回
eof

C语言的问题,fread和fgets的区别是什么?

fread()函数通常用于读取二进制数据,用它可以精确的指定要读取多少字节的数据.
fgets()函数通常用于读取ASCII文本,它的参数是一个字符数组.
fread读入的内容不包括最后的字符串终结符,而fgets则包括这个,也就是说fread读入的内容不是字符串,因为少一个终结符,而fgets则读入的是一个字符串。
至于if(p)这个问题应该很明了,虽然p是指值,但是可以让指针指向NULL,这样的话就可以使用if(p)来判断指针是否指向了内存,若没有就跳过语句。
fread和 fgets的区别:
fread :以字节位计算长度,按照指定的长度和次数读取数据,遇到结尾或完成指定长度读取后停止.
fgets :整行读取,遇到回车换行或结尾停止.在文本方式时使用.
读字符串函数fgets函数的功能是从指定的文件中读一个字符串到字符数组中,函数调用的形式为:
fgets(字符数组名,n,文件指针);
其中的n是一个正整数。表示从文件中读出的字符串不超过 n-1个字符。在读入的最后一个字符后加上串结束标志'\0'。
例如:fgets(str,n,fp);的意义是从fp所指的文件中读出n-1个字符送入字符数组str中。(按行读取)fgets()每次读入一行就会指向下一行.
所以把前面10行读进去了就清除. 然后下一次fgets()就是第十一行了.
fgets()怎么每次都是读一行?你怎么设定?
fread是用于整块数据的读写函数,可用来读写一组数据,如一个数组元素,一个结构变量的值等。
读数据块函数调用的一般形式为: fread(buffer,size,count,fp),其中:
buffer是一个指针,在fread函数中,它表示存放输入数据的首地址。
size 表示数据块的字节数。
count 表示要读写的数据块块数。
fp 表示文件指针。
例如: fread(fa,4,5,fp);
其意义是从fp所指的文件中,每次读4个字节(一个实数)送入实数组fa中,连续读5次,即读5个实数到fa中。
fread -- 读取文件(可安全用于二进制文件)在区分二进制文件和文本文件的系统上(如 Windows)打开文件时,fopen()
函数的 mode 参数要加上 'b'。$handle = fopen($filename, "rb");

阅读更多 >>>  linux怎么删除已经执行的文件

c语言中fread的用法

  fread是以记录为单位的I/O函数,fread和fwrite函数一般用于二进制文件的输入输出。下面我就跟你们详细介绍下c语言中fread的用法,希望对你们有用。
  c语言中fread的用法如下:
  #include

  size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);

  返回值:读或写的记录数,成功时返回的记录数等于nmemb,出错或读到文件末尾时返回的记录

  数小于nmemb,也可能返回0。

  fread用于读写记录,这里的记录是指一串固定长度的字节,比如一个int、一个结构体或者一个定长数组。参数size指出一条记录的长度,而nmemb指出要读或写多少条记录,这些记录在ptr所指的内存空间中连续存放,共占size * nmemb个字节,fread从文件stream中读出size * nmemb个字节保存到ptr中,而fwrite把ptr中的size * nmemb个字节写到文件stream中。

  nmemb是请求读或写的记录数,fread和返回的记录数有可能小于nmemb指定的记录数。例如当前读写位置距文件末尾只有一条记录的长度,调用fread时指定nmemb为2,则返回值为1。如果当前读写位置已经在文件末尾了,或者读文件时出错了,则fread返回0。如果写文件时出错了,则fwrite的返回值小于nmemb指定的值。下面的例子由两个程序组成,一个程序把结构体保存到文件中,另一个程序和从文件中读出结构体

  fread的例子程序如下:

  /* -------------------writerec.c--------------- */

  #include

  #include

  struct record {

  char name[10];

  int age;

  };

  int main(void)

  {

  struct record array[2] = {{"Ken", 24}, {"Knuth", 28}};

  FILE *fp = fopen("recfile", "w");

  if (fp == NULL) {

  perror("Open file recfile");

  exit(1);

  }

  fwrite(array, sizeof(struct record), 2, fp);

  fclose(fp);

  return 0;

  }

  /* -------------------readrec.c----------------- */

  #include

  #include

  struct record {

  char name[10];

  int age;

  };

  int main(void)

  {

  struct record array[2];

  FILE *fp = fopen("recfile", "r");

  if (fp == NULL) {

  perror("Open file recfile");

  exit(1);

  }

  fread(array, sizeof(struct record), 2, fp);

  printf("Name1: %s\tAge1: %d\n", array[0].name, array[0].age);

  printf("Name2: %s\tAge2: %d\n", array[1].name, array[1].age);

  fclose(fp);

  return 0;

  }

  $ gcc writerec.c -o writerec

  $ gcc readrec.c -o readrec

  发现生成的文件recfile不能直接打开。

  原因:我们把一个struct record结构体看作一条记录,由于结构体中有填充字节,每条记录占16字节,

  把两条记录写到文件中共占32字节。该程序生成的recfile文件是二进制文件而非文本文件,因为其

  中不仅保存着字符型数据,还保存着整型数据24和28(在od命令的输出中以八进制显示为030和034)。

  注意,直接在文件中读写结构体的程序是不可移植的,如果在一种平台上编译运行writebin.c程序,

  把生成的recfile文件拷到另一种平台并在该平台上编译运行readbin.c程序,则不能保证正确读出

  文件的内容,因为不同平台的大小端可能不同(因而对整型数据的存储方式不同),结构体的填充方式

  也可能不同(因而同一个结构体所占的字节数可能不同,age成员在name成员之后的什么位置也可能不同)。

  通过readrec程序读取文件recfile的内容,说明writerec程序的确记录成功写入recfile中。

  从recfile读出的内容如下:

  Name1: Ken Age1: 24

  Name2: Knuth Age2: 28

  fwrite和fread的应用举例:

  1.将一个字符串写入文件:

  char *str="hello,I am a test program!";

  fwrite(str,sizeof(char),strlen(str),fp)

  2.将一个字符数组写入文件:

  char str[]={'a','b','c','d','e'};

  fwrite(str,sizeof(char),sizeof(str),fp)

  3.将一个整型数组写入文件:

  int a[]={12,33,23,24,12};

  先计算数组元素个数nmemb,之后

  fwrite(a,sizeof(int),nmemb,fp)

  注:由于程序生成的文件是二进制文件而非文本文件,因此,不用机器,整数的表达不同,

  所以无法直接打开生成文件。可通过fread函数检验数据是否写入文件。

C语言中fread和fcanf从文件读取数据的区别

fread是以整体作为单位进行读取,一般是一次读取一个结构体大小的块;
fscanf是格式化的读取;读取的都是基本类型数据,所以对于一个结构体,一次需要按照类型分别读取其中的元素;
另外,对于文件末尾判定;fcanf是以EOF作为判定,
fread使用feof函数判定。

c语言 ,fread,fwrite和fscanf,fprint不知格式化方式和二进制方式的区别

fread 和fscanf都是读函数
fwrite和fprintf都是写函数。
原理类似 以fread和fscanf对比举例
fread是不管文件中什么内容,直接读到内存中, 不考虑格式。
而fscanf在读的时候, 第一步要做的 和fread相同,先读取字符到内存中,然后要解析格式字符串,根据格式字符串,去判断读到的字符,和格式字符串是否相符,如果相符,再转换成对应的变量类型,存到参数指针中。
比如分析格式字符串为%d,那么就要判断读到的字符是不是0~9之间的,是的话 再读下一个,直到读到不是0~9之间的字符。 最后 再把读到的字符,转为整型。
由于有这些判断,转换,所以效率自然低。
至于文件打开的方式是文本或者二进制, 和使用哪个函数没太多关系
一般fscanf用于文本,而fread用于二进制。 但并非绝对,二进制也可以用fscanf,而文本也一样可以用fread的。

fwrite()函数和fread()函数分别有几个返回值?分别代表什么意思?(C语言)

分类: 电脑/网络 >> 程序设计 >> 其他编程语言
解析:

fwrite(将数据写至文件流)
相关函数 fopen,fread,fseek,fscanf
表头文件 #include

定义函数 size_t fwrite(const void * ptr,size_t size,size_t nmemb,FILE * stream);

函数说明 fwrite()用来将数据写入文件流中。参数stream为已打开的文件指针,参数ptr 指向欲写入的数据地址,总共写入的字符数以参数size*nmemb来决定。Fwrite()会返回实际写入的nmemb数目。

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

范例 #include

#define set_s (x,y) {strcoy(s[x].name,y);s[x].size=strlen(y);}

#define nmemb 3

struct test

{

char name[20];

int size;

}s[nmemb];

main()

{

FILE * stream;

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(stream);

}

执行 参考fread()。

fread(从文件流读取数据)

相关函数 fopen,fwrite,fseek,fscanf

表头文件 #include

定义函数 size_t fread(void * ptr,size_t size,size_t nmemb,FILE * stream);

函数说明 fread()用来从文件流中读取数据。参数stream为已打开的文件指针,参数ptr 指向欲存放读取进来的数据空间,读取的字符数以参数size*nmemb来决定。Fread()会返回实际读取到的nmemb数目,如果此值比参数nmemb 来得小,则代表可能读到了文件尾或有错误发生,这时必须用feof()或ferror()来决定发生什么情况。

返回值 返回实际读取到的nmemb数目。

附加说明

范例 #include

阅读更多 >>>  Linux里面的mv什么意思

#define nmemb 3

struct test

{

char name[20];

int size;

}s[nmemb];

main()

{

FILE * stream;

int i;

stream = fopen(“/tmp/fwrite”,”r”);

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

fclose(stream);

for(i=0;i
<nmemb;i++)
printf(“name[%d]=%-20s:size[%d]=%d\n”,i,s[i].name,i,s[i].size);

}

执行 name[0]=Linux! size[0]=6

name[1]=FreeBSD! size[1]=8

name[2]=Windows2000 size[2]=11
</nmemb;i++)

c语言中fread函数怎么用

fread函数可从文件中读取二进制数据
语法:
A = fread(fid, count)
A = fread(fid, count, precision)
其中fid为指针所指文件中的当前位置,count指读取的数据个数, precision表示以什么格式的数据类型读取数据。
例子:
fid = fopen('alphabet.txt', 'r');c = fread(fid, 5)'c =65 66 67 68 69fclose(fid);
程序说明:alphabet文件中按顺序存储着26个英文字母,读取文件之前要先打开文件,由于未指定读取数据的类型,所以程序指定默认类型为无符号字符型即uchar,65、66、67、68、69代表A、B、C、D、E,文件用完还要记得关闭文件,以便释放指针。
扩展资料:用 法
int feof(FILE *stream);
参数
流 :FILE结构的指针
注意:feof判断文件结束是通过读取函数fread/fscanf等返回错误来识别的,故而判断文件是否结束应该是在读取函数之后进行判断。比如,在while循环读取一个文件时,如果是在读取函数之前进行判断,则如果文件最后一行是空白行,可能会造成内存错误。
参考资料:fread--百度百科
1、C语言中:fread是一个函数。从一个文件流中读数据,最多读取count个元素,每个元素size字节,如果调用成功返回实际读取到的元素个数,如果不成功或读到文件末尾返回 0。函数原型:size_t fread ( void *buffer, size_t size, size_t count, FILE *stream) ;参数:buffer 用于接收数据的内存地址size 要读的每个数据项的字节数,单位是字节count 要读数据项的个数,每个数据项size个字节.stream 输入流的指针返回值:返回实际读取的元素个数。如果返回值与count不相同,则可能文件结尾或发生错误。从ferror和feof获取错误信息或检测是否到达文件结尾。2、例程:
#include

#include

int main(void){ FILE*stream; char msg[]="this is a test"; char buf[20]; if((stream=fopen("DUMMY.FIL","w+"))==NULL) { fprintf(stderr,"Cannot open outputfile.\n"); return 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(stream); return0;}

如果你想把这8个字节当成一个数来读的话可以这样(在VC环境下)

__int64 a;

fread(&a,sizeof(__int64),1,fp);

如果你想分别读出这8个字节的话,可以这样:

char a[8];

fread(a,sizeof(char),8,fp);

希望对你有帮助

__int64也可以用来表示一个整数,只不过它能表示的范围比int类型的要大,int类型占4个字节,而这个__int64占8个字节。如果你用的是gcc编译器(像DEV-C等),那应该是long long

unsigned char a[8];

fread(a,8,1,fp);

然后在对a的元素按需求处理。

如果声明成double,必须在写文件的时候写入的变量也是double,用double读出来才对。

写入字节,用double读出来肯定不对,double是浮点,不是整数,使用8个字节来存储,1个符号位,11位阶数,52位尾数。

fread

  功 能: 从一个流中读数据

  函数原型: size_t fread(void *buffer,size_t size,size_t count,FILE *stream); 

  参 数:

  1.用于接收数据的地址(指针)(buffer)

  2.单个元素的大小(size) :单位是字节而不是位,例如读取一个int型数据就是4个字节

  3.元素个数(count)

  4.提供数据的文件指针(stream)

  返回值:读取的元素的个数

因为你读的是二进制文件,你fopen的时候要以fopen(“file”,‘rb’);去读;fread函数中间的size很关键,如果你一次读size个字节(你那里是8个字节),而你的内容没有size那么大,就会读失败。所以建议读的时候1个字节1个字节的读,读n次。

fread(a,1,n,fp);返回的是读的元素的次数,即它的个数。

而你的二进制文件是按位算的;int型的数组a来保存“1”,说明你的“1”要占4个字节,“1”的二进制是 0000 0000 0000 0001,所以你读的时候fread(a,1,4,fp);只能读4个字节,也就是分4次读。读8个字节的结果就不是"1"了。

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

扩展资料:

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

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

C语言 fread(buf,size,count,fp)

buf:一个指针,指向存放读入文件的缓冲区
size:要读的每个数据块的字节数
count:要读的数据块的个数
fp:文件指针

double d[10];
fread(d,sizeof(double),10,fp);
指从fp指向的文件中读10个double类型的值到数组d中
请采纳
buf表示存放读入一个数据的地址指针;size表示读出的字节数;count表示读出数据项的个数;fp表示文件型指针。
例如:fread(f,4,2,fp);
其中,f是一个实型数组名,在内存中占4个字节。该语句功能是从fp所指向的文件中读入两个4字节的数据到f中。

网站数据信息

"c语言中fread是什么意思,c语言中fgets 、fputs、fread、fscanf、fseek的区别和作用"浏览人数已经达到22次,如你需要查询该站的相关权重信息,可以点击进入"Chinaz数据" 查询。更多网站价值评估因素如:c语言中fread是什么意思,c语言中fgets 、fputs、fread、fscanf、fseek的区别和作用的访问速度、搜索引擎收录以及索引量、用户体验等。 要评估一个站的价值,最主要还是需要根据您自身的需求,如网站IP、PV、跳出率等!