C语言文件写入结构体的乱码解决方法

C语言中用 fwrite 向文件写入结构体时出现乱码的解决方法,由于fwrite是用于二进制文件的,所以打开直接写入的文件是会出现乱码,这时需要一个中间文件来存储临时数据,就是先将数据存储在一个临时文件,然后从这个数据中读取出来在写入目标文件。也许我描述的不是很好,下面看看我写的一个例子或许你就会明白我说的是什么了。


#include <stdio.h>


int main ()
{
  FILE * pFile;
  FILE * temp;

  double xvalue, yvalue;
  struct punto{
        float x;
        float y;
    } pto;
  xvalue = 1;
  temp = fopen("temp.aux", "w+");
  int i;
  for(i = 0; i < 10; i++){
    pto.x = i;
    pto.y = 0;
    fwrite(&pto, sizeof(pto), 1, temp);
  }

  pFile = fopen ("myfile.txt", "w+");
  rewind(temp);
  fread(&pto, sizeof(pto), 1, temp);
  while(!feof(temp)){
    //pto.x = xvalue;
    pto.y = rand()%100;
    fprintf(stdout, "%f %f\n", pto.x, pto.y);
    fprintf(pFile, "%f %f\n", pto.x, pto.y);
    fseek(temp, -sizeof(pto), SEEK_CUR);
    fwrite(&pto, sizeof(pto), 1, temp);
    fread(&pto, sizeof(pto), 1, temp);
    
    sleep(1);
  }
  fclose(temp);
  remove("temp.dat");
  fclose(pFile);
  return 0;
}

运行结果:

0.000000 83.000000
1.000000 86.000000
2.000000 77.000000
3.000000 15.000000
4.000000 93.000000
5.000000 35.000000
6.000000 86.000000
7.000000 92.000000
8.000000 49.000000
9.000000 21.000000

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值