Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 不能让printf高兴。拒绝“i”和“l”的格式字符串_C_Printf - Fatal编程技术网

C 不能让printf高兴。拒绝“i”和“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额外参数]| 我

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额外参数]|

我也两次收到这两条信息

我甚至不知道怎么会有太多的东西。只是所有东西中的一个。它想告诉我什么?

对于长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的警告相同;例如,您是否尝试阅读文档?还是搜索?