这个结构的大小是多少?

时间:2015-11-20 03:57:05

标签: c

 typedef struct {
 char valid;
 char tag;
 char block[4];
} line;

我相信它是6,因为block[]是4,每个字符是1个字节。这是在x86机器上。 validtag之间是否有偏差?应该是8?

4 个答案:

答案 0 :(得分:4)

如果您希望结构的大小使用sizeof运算符。

e.g。

size_t struct_size = sizeof(line);

它以字节为单位返回struct的大小。请注意,sizeof(char)== 1总是如此,因此技术上字节并不总是指8位。

来自C:TCN, "Page 348" at the bottom of the page: -

  

理论上,机器的char可能大于8   比特,虽然它对于托管环境来说并不常见(基本上,   台式计算机等 - 唯一需要的环境   甚至还有开头的功能)。

     

在这样的机器上,   与许多人的期望相反, sizeof(char)仍为1 ;什么   更改是 CHAR_BIT 的值。这与此相关   一台机器,int有可能仍然具有其所需的范围,   但要与char相同。

     

因此,在这样的机器上,那里   可能存在至少一个unsigned char的值,以便转换   对于int,它是负值,并且比较等于EOF。然而,   据我所知,所有这些系统都提供了   实际上,getchar()函数和相关函数确保了   EOF值与实际可读取的任何值都不同   从文件。例如,char可以是32位类型,但你可以   从文件中读取“字符”时,仍然只能看到值0-255。

从WG14 n1256 - 第6.5.3.4节:

  

sizeof运算符产生其操作数的大小(以字节为单位) ...当应用于具有type,unsigned char或signed char的操作数时,   (或其合格版本)结果为1.

答案 1 :(得分:1)

这是6.对sizeof的简单调用将确认这一点。 这是问题还是有任何其他与结构填充有关的问题?

答案 2 :(得分:0)

只需使用sizeof。这是一个程序,告诉你行的大小:

#include <stdio.h>

typedef struct {
    char valid;
    char tag;
    char block[4];
} line;

int main(void) {
    printf("%zu\n", sizeof(line));
    return 0;
}

答案 3 :(得分:0)

您可以使用sizeof函数来获取已用内存来分配该结构。

printf("%i" , sizeof(line));