c - 不能让 printf 高兴。拒绝“i”和“l”的格式字符串
问题描述
long int triagedOut = 0;
printf("%i", triagedOut);
main.c|89|警告:格式“%i”需要“int”类型的参数,但参数 2 的类型为“long int”[-Wformat=]|
实际上,我在同一行中两次收到该消息。???
好的,所以我将其更改为 long int 说明符“l”,然后...
printf("%l", triagedOut);
main.c|89|警告:转换在格式末尾缺少类型 [-Wformat=]|
main.c|89|警告:格式参数过多 [-Wformat-extra-args]|
我也两次收到这两条消息。
我什至不知道怎么会有太多的东西。只是所有的1。它想告诉我什么?
解决方案
您需要%ld
使用long int
.
printf("%ld", triagedOut);
另请注意以下备注:
Format
%i
确实需要一个int
参数,并且您传递的是 along int
,它是一种不同的类型,并且可能具有不同的大小,具体取决于目标平台。格式
%l
不完整:l
只是一个长度修饰符,您还需要一个转换说明符,例如i
,d
,u
,x
... 因此建议更正%ld
。i
和d
等价于printf()
,但它们具有不同的含义scanf()
:%i
转换由其初始字符确定的以十进制、八进制或十六进制表示的整数,而%d
仅转换以十进制表示的整数。int i; sscanf("0x10", "%i", &i); // sets i to 16 sscanf("0x10", "%d", &i); // sets i to 0 sscanf("010", "%d", &i); // sets i to 10 sscanf("010", "%i", &i); // sets i to 8
您收到两次消息的原因可能是这些是警告消息,不会阻止编译继续进行,并且您的 IDE 可能会编译 2 个不同版本的可执行文件,一个处于调试模式,一个处于生产模式。
推荐阅读
- firebase - 颤振 android_alarm_manager 没有 Firebase 身份验证
- html - 下拉菜单未延伸到导航栏下方,仅替换原始链接
- swift - Swift UITextView LayoutManager 子类
- laravel - Dingo/Api 和 JWT 身份验证
- rust - 在对特征的引用和在 Rust 中实现该特征的结构之间进行转换
- jquery - jQuery:从动态模式显示静态文本
- assembly - 在 x86 程序集中写入 .bss 部分
- julia - Julia 1.0 的环境变量
- haskell - 收到错误“约束中的非类型变量参数:积分 [a2]”
- arrays - 浮点数组到字节数组和 Vise Versa