微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

这个异常是什么意思?格式 %d 需要类型为“int”的参数,但参数 2 的类型为“long long unsigned int”[-Wformat]

如何解决这个异常是什么意思?格式 %d 需要类型为“int”的参数,但参数 2 的类型为“long long unsigned int”[-Wformat]

我是一名试图学习 C 和 C++ 的学生,我遇到了说明符 %d 的问题我不明白控制台中写的异常,它正在写

The format %d expects argument of type 'int',but argument 2 has type 'long long unsigned int' [-Wformat]

代码如下:

#include<stdio.h>
#include<stdlib.h>

int main()
{
    short int u=1;
    int v=2;
    long int w=3;
    char x='x';
    float y=4;
    double z=5;
    long double a=6;
    long b=7;
    printf("short int:%d\n",sizeof(u));
    printf("int:%d octets\n",sizeof(v));
    printf("long int:%d octets\n",sizeof(w));
    printf("char:%d octets\n",sizeof(x));
    printf("float:%d octets\n",sizeof(y));
    printf("double:%d octets\n",sizeof(z));
    printf("long double:%d octets\n",sizeof(a));
    printf("long:%d octets\n",sizeof(b));
    return 0;
}

解决方法

运算符sizeof返回的值类型为无符号整数类型size_t 转换说明符d用于输出int类型的值。您必须使用转换说明符 zu。否则你会得到未定义的行为。

例如

printf("short int:%zu\n",sizeof(u));

来自 C 标准(7.21.6.1 fprintf 函数)

9 如果转换规范无效,则行为是 undefined.275) 如果任何参数不是正确的类型 对应的转换规范,行为未定义。

,

sizeof operator 返回 size_t 类型。这始终是未签名的,并且在您的平台上是 long long unsigned int;在其他平台上,它可能只是 unsigned long 或者实际上是其他一些(无符号)整数类型。

对这种类型的参数使用 %zu 格式说明符;这将适用任何实际的 size_t 类型定义。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。