gpt4 book ai didi

c - 为什么在此示例中将 utmp 结构数组定义为 char?

转载 作者:行者123 更新时间:2023-12-02 03:27:42 25 4
gpt4 key购买 nike

我正在研究 Understanding Unix/Linux Programming (Bruce Molay) 中的一些示例代码.声明了一个数组来保存 utmp 结构:

#define NRECS   16
#define NULLUT ((struct utmp *)NULL)
#define UTSIZE (sizeof(struct utmp))

static char utmpbuf[NRECS * UTSIZE];

为什么选择将数组类型声明为 char 而不是如下所示的 struct utmp

static  struct utmp    utmpbuf[NRECS];

真正的书源在这里:

最佳答案

这段代码可能有问题。存储应该是:

static  struct utmp    utmpbuf[NRECS];

正如你所建议的。至于这本书为什么这样写,你得问问他们。我看不出任何可以想到的理由。

问题来自于尝试将 char 数组别名为 struct utmp:

recp = ( struct utmp *) &utmpbuf[cur_rec * UTSIZE];

首先,char 数组可能没有为 struct utmp 正确对齐。如果未正确对齐,此转换会导致未定义的行为。

即使它正确对齐,任何使用 *recprecp->X 的尝试,其中 X 不是字符类型,将通过违反严格的别名规则导致未定义的行为。此代码不执行此操作,但推测使用此函数的调用代码将在某个阶段取消引用返回的指针。

关于c - 为什么在此示例中将 utmp 结构数组定义为 char?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29456727/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com