c - 结构中数据类型的顺序

标签 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;

然后我得到了准确的结果。据我所知,应该首先给出更高的数据类型。有人说为什么数组应该放在最后。

最佳答案

这并不是说数组必须放在最后,而是如果您希望能够将其打印为字符串(使用 %s 格式说明符),则您的数组需要一个 NULL 终止符。将 c 重新定义为 uint8 c[9] 并将最后一个元素 (c[8]) 设置为 0。

关于c - 结构中数据类型的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23087148/

相关文章:

c++ - 编译单个大头文件(VS : C1063)

c - 如何定义包含指向自身的指针的 typedef 结构?

c - 在c中使用转义序列使用循环在打印数组末尾打印换行符

c# - 双向远程查找表,C#

arrays - 为什么这是 O(nlogn)

c# - 使用 O(1) 内存、O(n) 运行时复杂度且无双重枚举实现 LINQ "chunk by predicate"

c++ - C/C++ mangle 以特定方式导出

c - 使用 SIGALRM 切换线程上下文

c - Monk 和 Power of Time DataStructure 查询

algorithm - 如何高效测试 Dijkstra 算法