结构中的数据类型顺序

时间:2014-04-15 14:46:08

标签: c data-structures

我的结构是,

typedef struct {
  uint16 a;
  uint16 b;
  uint8  c[8];
  uint8  d;
  uint8  e;
}subset_t;

typedef struct node{
   subset_t list;
   struct node *link;
}all_list

添加列表后,我正在显示。例如,添加元素是:

a = 112, b = 341, c = AB321EF6, d = 1, e = 2.

如果我显示,除c外,每件事情都很好:它会显示AB321EF61N

但如果我将结构更改为:

typedef struct {
      uint16 a;
      uint16 b;
      uint8  d;
      uint8  e;
      uint8  c[8];
    }subset_t;

然后我得到了确切的结果。据我所知,应首先给出更高的数据类型。有人告诉为什么数组应该是最后一个。

2 个答案:

答案 0 :(得分:2)

并不是说数组必须是最后一个,如果你希望能够将它作为一个字符串打印出来(使用%s格式说明符),那么你需要在数组上使用NULL终止符。将c重新定义为uint8 c[9]并将最后一个元素(c[8])设置为0.

答案 1 :(得分:1)

您应该显示更多代码。

我猜你得到的“奇怪”结果是因为你遇到了未定义的行为。

您不能在char c[8]中存储“AB321EF6”,因为字符串不适合,终结器没有空间。因此,您的打印将在c的末尾运行,并且取决于结构的其余部分,内存布局可能会也可能不会触及终结器。这是未定义的行为。