如何解决这个异常是什么意思?格式 %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 举报,一经查实,本站将立刻删除。