我的结构是,
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;
然后我得到了确切的结果。据我所知,应首先给出更高的数据类型。有人告诉为什么数组应该是最后一个。
答案 0 :(得分:2)
并不是说数组必须是最后一个,如果你希望能够将它作为一个字符串打印出来(使用%s
格式说明符),那么你需要在数组上使用NULL终止符。将c重新定义为uint8 c[9]
并将最后一个元素(c[8]
)设置为0.
答案 1 :(得分:1)
您应该显示更多代码。
我猜你得到的“奇怪”结果是因为你遇到了未定义的行为。
您不能在char c[8]
中存储“AB321EF6”,因为字符串不适合,终结器没有空间。因此,您的打印将在c
的末尾运行,并且取决于结构的其余部分,内存布局可能会也可能不会触及终结器。这是未定义的行为。