user-0 提问: 结构体与文件 同时使用时 的实现问题！

回复:
user: user-1
content: 仅供参考 typedef struct USERINFO { 	char szName[10]; 	int nScore; 	USERINFO() 	{ 		memset(szName ,0 ,10); 		nScore = 0; 	} 	USERINFO(const char * name ,int n) 	{ 		strncpy_s(szName ,name ,10); 		nScore = n; 	} } _UserInfo;    int _tmain(int argc, _TCHAR* argv[]) { 	_UserInfo ui1("xiao ming",100); 	_UserInfo ui2("xiao wang",60); 	// 写入文件 	FILE * f = fopen("test" ,"wb"); 	if (f) 	{ 		fwrite(&ui1 ,sizeof(_UserInfo) ,1 ,f); 		fwrite(&ui2 ,sizeof(_UserInfo) ,1 ,f); 		fclose(f); 	}  	// 读取并显示 	_UserInfo ui3; 	_UserInfo ui4; 	f = fopen("test" ,"rb"); 	if (f) 	{ 		fread(&ui3 ,sizeof(_UserInfo) ,1 ,f); 		fread(&ui4 ,sizeof(_UserInfo) ,1 ,f); 		// 显示出来看看 		printf("name:%s socre:%d\n" ,ui3.szName ,ui3.nScore); 		printf("name:%s socre:%d\n" ,ui4.szName ,ui4.nScore); 		fclose(f); 	} 	return 0; }

user: user-2
content: 对于结构体引用结构体元素的符号：->或.; 至于使用那种方式，要看该结构体变量是指针变量（使用->)还是普通变量（使用.）。

user: user-3
content: 仅供参考：#include <stdio.h> #define field_offset(s,f) (int)(&(((struct s *)(0))->f)) struct AD  { int a; char b[13]; double c;}; #pragma pack(push) #pragma pack(1) struct A1  { int a; char b[13]; double c;}; #pragma pack(2) struct A2  { int a; char b[13]; double c;}; #pragma pack(4) struct A4  { int a; char b[13]; double c;}; #pragma pack(8) struct A8  { int a; char b[13]; double c;}; #pragma pack(16) struct A16 { int a; char b[13]; double c;}; #pragma pack(pop) int main() {     printf("AD.a %d\n",field_offset(AD,a));     printf("AD.b %d\n",field_offset(AD,b));     printf("AD.c %d\n",field_offset(AD,c));     printf("AD sizeof %d\n", sizeof(AD));     printf("\n");     printf("A1.a %d\n",field_offset(A1,a));     printf("A1.b %d\n",field_offset(A1,b));     printf("A1.c %d\n",field_offset(A1,c));     printf("A1 sizeof %d\n", sizeof(A1));     printf("\n");     printf("A2.a %d\n",field_offset(A2,a));     printf("A2.b %d\n",field_offset(A2,b));     printf("A2.c %d\n",field_offset(A2,c));     printf("A2 sizeof %d\n", sizeof(A2));     printf("\n");     printf("A4.a %d\n",field_offset(A4,a));     printf("A4.b %d\n",field_offset(A4,b));     printf("A4.c %d\n",field_offset(A4,c));     printf("A4 sizeof %d\n", sizeof(A4));     printf("\n");     printf("A8.a %d\n",field_offset(A8,a));     printf("A8.b %d\n",field_offset(A8,b));     printf("A8.c %d\n",field_offset(A8,c));     printf("A8 sizeof %d\n", sizeof(A8));     printf("\n");     printf("A16.a %d\n",field_offset(A16,a));     printf("A16.b %d\n",field_offset(A16,b));     printf("A16.c %d\n",field_offset(A16,c));     printf("A16 sizeof %d\n", sizeof(A16));     printf("\n");     return 0; } //AD.a 0 //AD.b 4 //AD.c 24 //AD sizeof 32 // //A1.a 0 //A1.b 4 //A1.c 17 //A1 sizeof 25 // //A2.a 0 //A2.b 4 //A2.c 18 //A2 sizeof 26 // //A4.a 0 //A4.b 4 //A4.c 20 //A4 sizeof 28 // //A8.a 0 //A8.b 4 //A8.c 24 //A8 sizeof 32 // //A16.a 0 //A16.b 4 //A16.c 24 //A16 sizeof 32 // //   电脑内存或文件内容或传输内容只是一个一维二进制字节数组及其对应的二进制地址； 人脑才将电脑内存或文件内容或传输内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……  推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。  不要把 fopen("...","...");fscanf,fprintf,fgets,fgetc,fclose //读时把\r\n替换成\n，写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待 和 fopen("...","...b");fseek,ftell,fread,fwrite,fgetc,fclose //不作以上替换，遇到\x1a仍继续读;读写的内容当字节看待 弄混了

user: user-4
content: 没太理解你的意思，什么叫读到的指针啊，你保存的不是数据吗？还是保存了一个指针的值？正常的应该是数据，读出来以后可以将这些内容赋值给一个结构体变量的，然后就可以用这个结构体来处理数据了，如果是结构体名，要用“.”操作，如果是一个结构体指针，就用“->”操作，注意这里修改的只是结构体里的东西，要想更新文件，必须重新写回文件