学习fread函数和fwrite函数的时候用到了如下内容:
一、数组全局定义如下:
struct PerInf
{
char name[20];
char addr[20];
char tel[11];
} student[3];
二、这个是学习fread函数的时候写的代码:
for(i=0;i<n;i++)
{
fread(&student[i],sizeof(struct PerInf),1,fp);
printf("姓名:%10s, 地址:%10s, 电话:%10s\n",student[i].name,student[i].addr,student[i].tel);
}
fclose(fp);
现象:
出现了几个现象,特在此进行标注方便以后回忆思考。
1、首先是在使用sfread函数获取结构体数组中的参数的时候,student[i].name,以及addr、tel都是数组,前两个是字符数组、后一个是整形变量,在并且每个前面都添加了&地址获取符,方面后续获取地址,但是会出现提示变量类型不相符,那个时候用的类型是&student[i]->name,原因咱不知道是什么,根据网络查询来看,换成&student.name这个报错消失了;
2、在报错全部消失后,输入内容进行代码简单的验证测试,发现这个结果不符合预期,在输入手机号(提示:手机号11位),显示数字不够长,我想到了int字符长度在64位系统位4字节,而且想到并通过网络验证了一个十进制数需要4个字节去存储,明显不够,采用网络提供的办法使用char 字符数组存储手机号码,可以方便的登记手机号码。
3、还有一个现象同时导致了手机号码的异常登记,就是student[i].name等其他成员,都是字符数组,所以在前面没有添加&地址获取符。这一块我还没有思考明白,会继续思考的。