在回答我的here的另一个答案的评论时,我发现我认为可能是C标准中的一个漏洞(c1x,我没有检查较早的标准,是的,我知道我独自一人不可能出现在整个地球上居民发现了标准中的错误)。信息如下:

  • 第6.5.3.4节(“操作符的大小”)第2段规定了"The sizeof operator yields the size (in bytes) of its operand"
  • 该部分的第3段指出:"When applied to an operand that has type char, unsigned char, or signed char, (or a qualified version thereof) the result is 1"
  • 第7.20.3.3节介绍了void *malloc(size_t sz),但只说了"The malloc function allocates space for an object whose size is specified by size and whose value is indeterminate"。它根本没有提及用于该参数的单位。
  • 附件E开头的8是CHAR_BIT的最小值,因此chars的长度可以超过一个字节。

  • 我的问题很简单:

    在char为16位宽的环境中,malloc(10 * sizeof(char))将分配10个char(20个字节)还是10个字节?上面的点1似乎表示前者,点2表示后者。

    有比我更多的C-standard-fu的人对此有答案吗?

    最佳答案

    在16位char环境中,malloc(10 * sizeof(char))将分配10个char(10个字节),因为如果char是16位,则该体系结构/实现将一个字节定义为16位。 char不是一个八位位组,而是一个字节。在较旧的计算机上,它可能会比我们今天使用的8位事实上的标准大。
    C标准的相关部分如下:

    关于c - C标准分配字符的潜在问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1535131/

    10-15 02:12
    查看更多