C 不能让printf高兴。拒绝“i”和“l”的格式字符串
main.c | 89 |警告:格式“%i”要求参数类型为“int”,但 参数2的类型为“long int”[-Wformat=]| 事实上,我在同一行中收到了两次这样的信息 好的,我将它改为长整型说明符l,然后C 不能让printf高兴。拒绝“i”和“l”的格式字符串,c,printf,C,Printf,main.c | 89 |警告:格式“%i”要求参数类型为“int”,但 参数2的类型为“long int”[-Wformat=]| 事实上,我在同一行中收到了两次这样的信息 好的,我将它改为长整型说明符l,然后 long int triagedOut = 0; printf("%i", triagedOut); main.c | 89 |警告:转换在格式末尾缺少类型[-Wformat=]| main.c | 89 |警告:格式参数太多 [-Wformat额外参数]| 我
long int triagedOut = 0;
printf("%i", triagedOut);
main.c | 89 |警告:转换在格式末尾缺少类型[-Wformat=]|
main.c | 89 |警告:格式参数太多
[-Wformat额外参数]|
我也两次收到这两条信息
我甚至不知道怎么会有太多的东西。只是所有东西中的一个。它想告诉我什么?对于长int,您需要使用%ld
还请注意以下几点:
格式%i确实需要一个int参数,而您正在传递一个长int,它是不同的类型,可能具有不同的大小,具体取决于目标平台
格式%l不完整:l只是一个长度修饰符,您还需要一个转换说明符,如i、d、u、x。。。因此,建议的修正为%ld。i和d对于printf是等效的,但对于scanf有不同的含义:%i转换由其初始字符确定的十进制、八进制或十六进制表示的整数,而%d仅转换十进制表示的整数
printf("%ld", triagedOut);
您两次获得这些消息的原因可能是,这些消息是警告消息,不会阻止编译继续进行,并且您的IDE可能会编译两个不同版本的可执行文件,一个处于调试模式,另一个处于生产模式
对于长整型,您需要使用%ld
还请注意以下几点:
格式%i确实需要一个int参数,而您正在传递一个长int,它是不同的类型,可能具有不同的大小,具体取决于目标平台
格式%l不完整:l只是一个长度修饰符,您还需要一个转换说明符,如i、d、u、x。。。因此,建议的修正为%ld。i和d对于printf是等效的,但对于scanf有不同的含义:%i转换由其初始字符确定的十进制、八进制或十六进制表示的整数,而%d仅转换十进制表示的整数
printf("%ld", triagedOut);
您两次获得这些消息的原因可能是,这些消息是警告消息,不会阻止编译继续进行,并且您的IDE可能会编译两个不同版本的可执行文件,一个处于调试模式,另一个处于生产模式
我认为您应该使用%ld或%li而不是%l或%I来打印长整数
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
我认为您应该使用%ld或%li而不是%l或%I来打印长整数
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
如果要打印长整数,应使用%li打印。编译器告诉您的是%l没有被识别为有效的格式说明符,如果没有任何这样的说明符,传递到调用中的triagedOut参数就太多了。与printfhello world triagedOut的警告相同;例如,您是否尝试阅读文档?或搜索?如果要打印长整数,应使用%li打印。编译器告诉您的是%l没有被识别为有效的格式说明符,如果没有任何这样的说明符,传递到调用中的triagedOut参数就太多了。与printfhello world triagedOut的警告相同;例如,您是否尝试阅读文档?还是搜索?