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