weixin_44500385 2022-04-13 13:18 采纳率: 0%
浏览 1481

%d和%zd的使用导致的不同

问题遇到的现象和发生背景

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”。

我的解答思路和尝试过的方法
我想要达到的结果
  • 写回答

3条回答 默认 最新

  • 吕布辕门 后端领域新星创作者 2022-04-13 14:08
    关注

    (int)sizeof 试一下这样,不回出现警告,由于类型原因问题

    评论
  • AaronLi. 2023-04-19 16:43
    关注

    你好,我刚刚看书也遇到了这个问题,我是这样理解的:对于编译器来说%d的转换说明是int类型,网上提到的size_t定义是unsigned int 64位(无符号64位整数),如果尝试使用%d读取这个值,你可能会输入负数,导致错误编译,为了严谨性,选择了把sizeof定义成一个类型,用%zd格式。

    评论
  • 觉醒的菜鸟想学习 2023-10-12 10:55
    关注

    sizeof是C语言的内置运算符,以字节为单位给出指定类型的大小。C99和C11提供%zd转换说明匹配sizeof的返回类型。一些不支持C99和C11的编译器可用%u或%lu代替%zd。

    评论
编辑
预览

报告相同问题?

问题事件

  • 请详细说明问题背景 12月13日
  • 创建了问题 4月13日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部