[语法]写入数据-数字-字符串-结构体

  • 写入数字

有一个int数组,在存储到文件时,一般有两种方式:
int buf[4] = { 0xA001098, 0xB002 ,0xC003, 0xD004 };

方式1 : 直接按字节写入
fwrite(buf, 1, sizeof(buf), fp);
(对照VC的内存窗口来理解)

方式2 :格式化为字符串写入
for(int i=0; i<4; i++)
{
char text[16];
sprintf(text, “%d,” , buf[i]);
fwrite(text,1,strlen(text), fp);
}

对于浮点数(float,double),也可以使用这两种写法

double a = 3 / 4.0;
fwrite(&a, 1, sizeof(a), fp);


char text[16];
sprintf(text, “%.2lf”, a);
fwrite(text, 1, strlen(text), fp);

比较:后者在保存数据时,丢失了精度,无法还原

  • 写入字符串

字符串的两种存储方式
char buf[16] = “hello”;

方式1:按实际有效长度写入
fwrite(buf, 1, strlen(buf), fp);

方式2:按固定长度写入
fwrite(buf, 1, 16, fp);
(占用了较多的空间)

  • 结构体写入

结构体数据的写入:
struct Student
{
int id; // id
char gender; // 性别
char name[16]; // 年龄
};
Student someone = { 20150101, ‘M’ , “Noname” };

方式一:整体写入
fwrite(&someone, 1, sizeof(someone), fp);
(对照VC的内存窗口来理解)

方式二:将各字段分开写入
fwrite(&someone.id, 1, 4, fp);
fwrite(&someone.gender, 1, 1, fp);
fwrite(&someone.name, 1, 16, fp);

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注