在这里,我想从输入读取数据到 struct dev,所以我使用 temp = (dev*) 输入从 char* 转换为 dev*。在我的机器上,行printf("%p\n", temp); 打印出 0x804a040,如果为真,则行printf("%p\n", temp+1); 应该打印出 0x804a04b,但它打印出 0x804a04c。行printf("%p\n", &temp->size); 应该打印出 0x804a047,但它打印出 0x804a048。
请帮我弄清楚我误解或不正确的地方
@all:感谢大家的帮助。我知道了。我读过一些帖子,解决方案是使用 #paragma pack(1) 或类似这样的指令。但它也是不鼓励的,因为它会减慢前驱的处理速度。那么,有没有其他的想法呢。
感谢!
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct dev
{
short id;
char name[5];
int size;
} dev;
char input[] = { 0x03, 0x00, 0x65, 0x67, 0x03, 0x00, 0x43, 0x09, 0x00, 0x00, 0x00,
0x00, 0x00, 0x65, 0x67, 0x03, 0x00, 0x43, 0x43, 0x00, 0x43, 0x00,
0x03, 0x00, 0x65, 0x67, 0x03, 0x00, 0x43, 0x43, 0x00, 0x43, 0x00,
0x03, 0x00, 0x65, 0x67, 0x03, 0x00, 0x43, 0x43, 0x00, 0x43, 0x00 };
int
main (int argc, char *argv[])
{
dev* temp;
temp = (dev*)input;
printf("%p\n", temp);
printf("%p\n", temp+1);
printf("%d\n", temp->id);
printf("%p\n", &temp->name[4]);
printf("%p\n", &temp->size);
temp++;
printf("%d\n", temp->id);
return 0;
}