
{
long id
char name[20]
long roomid
}stDemo[100]
for(i=0i<100i++)
{
printf("请输入学号:")
scanf("%ld",&stDemo[i].id)
if(stDemo[i].id == -1) break/*用-1结束输入*/
printf("请输入姓名:")
scanf("%s",stDemo[i].name)
printf("请输入房号:")
scanf("%ld",&stDemo[i].roomid)
}
#define DATA_SIZE (sizeof(struct client) - 4) //减去指针长度,宏可随结构体调整相应变化fwrite(head,DATA_SIZE,1,fp)
2. 并不是存储了回车,只是会根据char成员的长度补齐。可以不用fflush。
用UltraEdit打开可以看到是二进制的。记事本文件确实也能显示部分ASCII值。
3. 存储money的代码楼主并未贴出,以下例句可以,请尝试:
printf("请输入您的存款:")
scanf("%ld",&head->money)
4. 不存地址可以由控制写入长度做到;不存其他字符大可放心,读取的时候按DATA_SIZE读出来
就好了,写的是什么,读的也将是什么。
----------
P.S: 要实现多记录存储。还需要存储一些header数据。比如总的记录个数等。
结构体在内存中的存储方式,和常规的C语言变量、常量存储方式类似,唯的不同在于对齐。
只所以要进行数据对齐是因为编译器对结构的存储的特殊处理能提高CPU存储变量的速度,一般来说,32位的CPU内存以4字节对齐,64位的CPU的以8字节的对齐。一般可以使用#pragma pack()来指出对齐的字节数。比如下面的代码,在debug会显示结构体test的内存大小为28,如果生成release版则所占内存大小为32 。
#include <stdio.h>
#ifdef _DEBUG
#pragma pack(4)
struct test
{
char x[13] // 13
int d // 4
double f // 8
}ss
#else
#pragma pack(8)
struct test
{
char x[13] // 13
int d // 4
double f // 8
}ss
#endif
int main(void){
printf("%d\n", sizeof(ss))
return 0
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)