为什么用sizeof返回的结构体长度不对

Iamsnowgirl 2003-07-17 01:32:57
定义一个结构
struct userinfo
{long int idd;
char name[8];
short int saving;
char ddress[100];
char telephone[15];
char innerno[8];
short int credit;
char sendtime[8];
char ictype;
short int borrownum;
};
userinfo user;
sizeof(user);
为什么sizeof(user)返回的值是152,而事实上这个结构体的大小为150,还有一个问题,我定义了里面的字符数组name[8],它可以存储4个汉字吗,要存储4个汉字,是否该定义为
name[9];
...全文
589 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
jishiping 2003-07-17
  • 打赏
  • 举报
回复
因为是数据对齐的关系。BCB缺省使用DWORD对齐,所以short int必须对齐到2的倍数的
地址上。因为上面的credit、borrownum都是位于奇数地址,所以会在这2个变量前加了
各一个字节。将结构定义为BYTE对齐就可以了。

#include <pshpack1.h>
struct userinfo
{long int idd;
char name[8];
short int saving;
char ddress[100];
char telephone[15];
char innerno[8];
short int credit;
char sendtime[8];
char ictype;
short int borrownum;
};
#include <poppack.h>

注意,BCB6的 poppack.h 和 pshpack1.h 有BUG,需要安装SP4补丁程序才行。
starstargao 2003-07-17
  • 打赏
  • 举报
回复
在32系统里面如果最后一个变量字数,不足4个字节,会自动补满4个字节,shortint 2个字节
编译器会自动加上两个字节
almser 2003-07-17
  • 打赏
  • 举报
回复
1.
在结构前加:
#pragma pack(1)
在结构后加:
#pragma pack()
---内存对齐问题.

2.name[9]



13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧