Chinaunix首页 | 论坛 | 博客
  • 博客访问: 217542
  • 博文数量: 36
  • 博客积分: 1410
  • 博客等级: 上尉
  • 技术积分: 374
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-04 18:21
文章分类

全部博文(36)

文章存档

2011年(1)

2009年(5)

2008年(30)

我的朋友

分类: C/C++

2008-09-20 10:20:12

名: fwrite
  功 能: 写内容到流中
  用 法:fwrite(buffer,size,count,fp);
  (1)buffer:是一个指针,对fwrite来说,是要输出数据的地址。
  (2)size:要写入的字节数;
  (3)count:要进行写入size字节的数据项的个数;
  (4)fp:目标文件指针。
  程序例:
  #include
  struct mystruct
  {
  int i;
  char ch;
  };
  int main(void)
  {
  FILE *stream;
  struct mystruct s;
  if ((stream = fopen("TEST.$$$", "wb")) == NULL) /* open file TEST.$$$ */
  {
  fprintf(stderr, "Cannot open output file.\n");
  return 1;
  }
  s.i = 0;
  s.ch = 'A';
  fwrite(&s, sizeof(s), 1, stream); /* write struct s to file */
  fclose(stream); /* close file */
  return 0;
  }
与fprintf的区别
fprintf(fp, "%d", buffer); 是将格式化的数据写入文件
fprintf(文件指针,格式字符串,输出表列);

fwrite(&buffer, sizeof(int), 1, fp);是以
二进位位方式写入文件
fwrite(数据,数据类型大小(字节数),写入数据的最大数量,文件指针);

由于fprintf写入时,对于整数来说,一位占一个字节,比如1,占1个字节;10,占2个字节;100,占3个字节,10000,占5个字节
所以文件的大小会随数据的大小而改变,对大数据空间占用很大。
而fwrite是按二进制写入,所以写入数据所占空间是根据数据类型来确定,比如int的大小为4个字节(一般32位下),那么整数10所占空间为4个字节,100、10000所占空间也是4个字节。所以二进制写入比格式化写入更省空间。

因此,
对于1 2 3 4 5 6 7 8 9 0 十个整数,用fprintf写入时,占10个字节;而用fwrite写入时,占40个字节。
对于100 101 102 103 104 105 106 107 108 109 110 这十个整数,用fprintf写入时,占30个字节;而用fwrite写入时,占40个字节。
对于10000 10100 10200 10300 10400 10500 10600 10700 10800 10900 11000 这十个整数,用fprintf写入时,占50个字节;而用fwrite写入时,还是占40个字节。
阅读(2032) | 评论(0) | 转发(0) |
0

上一篇:编辑词条fopen

下一篇:fseek

给主人留下些什么吧!~~