typedef struct {
char valid;
char tag;
char block[4];
} line;
我相信它是6,因为block[]
是4,每个字符是1个字节。这是在x86机器上。 valid
和tag
之间是否有偏差?应该是8?
答案 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));