C 长期的冲突

C 长期的冲突,c,sizeof,C,Sizeof,我在网上查过了,它显示long的大小为4字节。但当我在笔记本电脑上打印sizeof(long)时,它会打印8。为什么价值观之间存在冲突?我正在使用这个打印语句 printf("%zu",sizeof(long)); 您想要看到的“冲突”来自标准,它没有指定整数类型的特定宽度。不同的编译器使用不同的宽度 但你真正的问题是:“我该怎么办?” 答案是使用标准提供的类型来实现此目的。包括“stdint.h”并对4字节整数使用int32\u t(或uint32\u t表示无符号整数) 请给自己找一个标准

我在网上查过了,它显示long的大小为4字节。但当我在笔记本电脑上打印sizeof(long)时,它会打印8。为什么价值观之间存在冲突?我正在使用这个打印语句

printf("%zu",sizeof(long));
您想要看到的“冲突”来自标准,它没有指定整数类型的特定宽度。不同的编译器使用不同的宽度

但你真正的问题是:“我该怎么办?”

答案是使用标准提供的类型来实现此目的。包括“stdint.h”并对4字节整数使用
int32\u t
(或
uint32\u t
表示无符号整数)


请给自己找一个标准,花点时间看看。不过,您不需要阅读每一行,只要足够了解其中的内容即可。

不需要。C标准规定,long必须至少与“int”一样宽。它没有具体说明它必须有多宽。“long”的宽度可以——也将——因平台而异。我试图从一个原始文件中提取数据,他们使用的long的大小是4。我该怎么办?@FoggyDay这是错误的,根据标准,int必须至少为2个字节,而long必须至少为4个字节。@Shivam Jadhav-你不能简单地假设所有平台上的所有编译器的sizeof(long)都是“4”。它不会——它可以而且会变化。“int”和“long-long”类型也是如此。正如爱管闲事的人所说,如果您需要4字节的固定宽度,那么解决方案是
\include
并使用
int32\u t
(而不是“long”):