免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1929 | 回复: 9
打印 上一主题 下一主题

linux下c关于变量位数的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-05-30 17:10 |只看该作者 |倒序浏览
源文件如下
sizeof.c
#include <stdio.h>;
#include <fcntl.h>;
#include <unistd.h>;
int main()
{
typedef struct
{
unsigned char c;
unsigned int i;
}TEST;
TEST test;
test.c='a';
test.i=23;
printf("sizeof(test) is %d\n",sizeof(TEST));
printf("sizeof(test.c) is %d\n",sizeof(test.c));
printf("sizeof(test.i) is %d\n",sizeof(test.i));
}
#gcc -o sizeof sizeof.c
sizeof(test) is 8
sizeof(test.c) is 1
sizeof(test.i) is 4

问题就在这。这个结构体里面只定义了两个成员,总的结构体的长度应该是5
怎么会是8。
望高手指点。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2005-05-30 17:12 |只看该作者

linux下c关于变量位数的问题

>;>;unsigned char c;

内存对齐  实际上分配了4个字节的空间.

论坛徽章:
0
3 [报告]
发表于 2005-05-30 17:46 |只看该作者

linux下c关于变量位数的问题

那我如果只想要一位怎么办。
因为想写一个简单的通信程序,
通信程序要对消息进行封装。一个消息包括消息头有消息体,里面就要严格确定位数。
如果不用struct定义消息,有没有其他的办法定义消息?

论坛徽章:
0
4 [报告]
发表于 2005-05-30 17:48 |只看该作者

linux下c关于变量位数的问题

一位可以考虑stdbool.h,似乎是C99开始支持的吧?

论坛徽章:
0
5 [报告]
发表于 2005-05-30 18:09 |只看该作者

linux下c关于变量位数的问题

好像在rhas3.0里面的/usr/include里面没有找到这个头文件。
如果是像下面的消息格式,怎么定义。
id     unsigned int                4个字节
id2   unsugined int              8个字节
flag  char                             1个字节
content    定长字符串         16字节

具体怎么定义他。还有就是关于这个定长字符串的处理。
能不能给出具体的C语句.

论坛徽章:
0
6 [报告]
发表于 2005-05-30 18:13 |只看该作者

linux下c关于变量位数的问题

原帖由 "dankey" 发表:
好像在rhas3.0里面的/usr/include里面没有找到这个头文件。


咦,我的RH9也没找到?奇怪,却是可以用的!

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
7 [报告]
发表于 2005-05-30 22:39 |只看该作者

linux下c关于变量位数的问题

原帖由 "albcamus" 发表:


咦,我的RH9也没找到?奇怪,却是可以用的!


不会吧,我明天找找。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
8 [报告]
发表于 2005-05-30 22:41 |只看该作者

linux下c关于变量位数的问题

可以用struct定义,然后用#program(错了,正确的记不住了)的宏来告诉编译器不要理会内存对齐。

唉,时间长不用就忘记。哎呀呀。

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
9 [报告]
发表于 2005-05-31 08:21 |只看该作者

linux下c关于变量位数的问题

  1. #include <stdio.h>;
  2. typedef struct
  3. {
  4.         unsigned char c;
  5.         unsigned int i;
  6. }__attribute__((packed)) TEST;

  7. int main()
  8. {
  9.         printf("sizeof(test) is %d\n",sizeof(TEST));
  10. }
复制代码

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
10 [报告]
发表于 2005-05-31 08:50 |只看该作者

linux下c关于变量位数的问题

/usr/lib/gcc-lib/i386-redhat-linux/3.2/include/stdbool.h


我的系统里在这里。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP