C语言中,%d的使用会出现警告和提醒,该用%zd后没问题,我想知道%d和%zd有什么不同,上网看到的都不太清楚,其中提到了size_t,这个与这个问题有什么关系吗?
int main()
{
int ahh[12] = { 3,23,22 };
printf("%d\n", sizeof(ahh));
return 0;
}
前后都是48,但是用%d会有两个警告
警告 C4477 “printf”: 格式字符串“%d”需要类型“int”的参数,但可变参数 1 拥有了类型“size_t”
警告 C6328 大小不匹配: 已将“unsigned __int64”作为 Param(2) 传递,但需要使用“int”来调用“printf”。
(int)sizeof 试一下这样,不回出现警告,由于类型原因问题
你好,我刚刚看书也遇到了这个问题,我是这样理解的:对于编译器来说%d的转换说明是int类型,网上提到的size_t定义是unsigned int 64位(无符号64位整数),如果尝试使用%d读取这个值,你可能会输入负数,导致错误编译,为了严谨性,选择了把sizeof定义成一个类型,用%zd格式。