【发布时间】:2013-09-23 06:33:05
【问题描述】:
我有以下c程序
struct in_addr {
unsigned long s_addr; // load with inet_aton()
};
struct sockaddr_in {
short a;
unsigned short b;
struct in_addr c;
char d[8];
};
int main(int argc, char** argv) {
struct sockaddr_in *record1;
record1 = (struct sockaddr_in*)malloc(sizeof(struct sockaddr_in*));
memset(record1, 0, 14);
record1->a = 16;
record1->b = 4;
//strcpy(record1->sin_zero, "1");
printf("Struct record1: %x", *record1);
}
当我单独分配 record1->a = 16 时,我得到 "Struct record1: 10"
当我分配 record1->a = 16 和 record1->b =4 时,我得到 "Struct record1:40010" (我可以发现它是 Little Endianness,但仍然 *我的预期输出是 04 10*(short 每个需要两个字节))
当我分配 record1->a=16; *record1->b =4;* record1->c.s_addr = 1UL;强> *strcpy(record1->d, "1");* 输出仍然是“Struct record1: 40010”(Y 是赋值给 long 和 char[] 没有反映?)
谁能解释这种行为。 我想看看结构的内容是如何在内存中分配的。有没有更聪明的方法来实现这一点?
【问题讨论】:
-
查看内容的最聪明方法是使用调试器(如果可用)。