2016-03-21 34 views
-3

这是我不断收到此错误的代码。格式指定类型'int',但打印大小时参数的类型为'无符号长'错误

format specifies type 'int' but the argument has type 'unsigned long' 

我复制了演讲中的代码,所以我不知道什么是错的。任何帮助感谢!

#include <stdio.h> 

int main(void) 
{ 
    char c; 
    double d; 
    float f; 
    int i; 

    printf("char: %i\n", sizeof(c)); 
    printf("double: %i\n", sizeof(d)); 
    printf("float: %i\n", sizeof(f)); 
    printf("int: %i\n", sizeof(i)); 
} 
+1

的sizeof'结果()'是类型'size_t',而不是'int'。使用'“%zi”'或转换为'(int)'。 – EOF

+0

尝试'%zu'来代替'%i'。 – owacoder

回答

2

sizeof操作的结果是有size_t类型,这是一个无符号类型。要打印它们,请使用printf("%zu", ...);

在你的情况下,printf()语句改为

printf("char: %zu\n", sizeof c); 
printf("double: %zu\n", sizeof d); 
printf("float: %zu\n", sizeof f); 
printf("int: %zu\n", sizeof i); 

事实上,你并不需要为每个类型的变量。你可以只写

printf("char: %zu\n", sizeof (char)); 
printf("double: %zu\n", sizeof (double)); 
printf("float: %zu\n", sizeof (float)); 
printf("int: %zu\n", sizeof (int)); 

此外,检查size_t类型的大小:

printf("size_t: %zu\n", sizeof (size_t)); 

,这相当于

printf("size_t: %zu\n", sizeof sizeof (char/int/float/double/...)); 
相关问题