格式指定类型' int'但是这个论点的类型是'#in; unsigned long'打印尺寸时出错

时间:2016-03-21 00:30:15

标签: c

这是我的代码,我一直收到此错误。

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 个答案:

答案 0 :(得分:4)

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/...));