gpt4 book ai didi

C 中 sizeof() 返回值的正确格式说明符

转载 作者:行者123 更新时间:2023-12-02 06:00:26 31 4
gpt4 key购买 nike

我有以下代码:

#include<stdio.h>

int main()
{
printf("The 'int' datatype is \t\t %lu bytes\n", sizeof(int));
printf("The 'unsigned int' data type is\t %lu bytes\n", sizeof(unsigned int));
printf("The 'short int' data type is\t %lu bytes\n", sizeof(short int));
printf("The 'long int' data type is\t %lu bytes\n", sizeof(long int));
printf("The 'long long int' data type is %lu bytes\n", sizeof(long long int));
printf("The 'float' data type is\t %lu bytes\n", sizeof(float));
printf("The 'char' data type is\t\t %lu bytes\n", sizeof(char));
}

哪些输出:
The 'int' datatype is        4 bytes
The 'unsigned int' data type is 4 bytes
The 'short int' data type is 2 bytes
The 'long int' data type is 8 bytes
The 'long long int' data type is 8 bytes
The 'float' data type is 4 bytes
The 'char' data type is 1 bytes

但这就是问题,编译器要求我使用 %lu (long unsigned int) 而不是 %d (int),正如我所期望的。毕竟,我们这里只讨论个位数,不是吗?那么为什么在使用 %d 而不是 %lu 时会出现以下错误?这与我使用 64 位系统(Ubuntu 14.10)有关吗?
helloworld.c: In function ‘main’:
helloworld.c:5:5: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘long unsigned int’ [-Wformat=]
printf("The 'int' datatype is \t\t %d bytes\n", sizeof(int));
^
helloworld.c:6:5: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘long unsigned int’ [-Wformat=]
printf("The 'unsigned int' data type is\t %d bytes\n", sizeof(unsigned int));
^
helloworld.c:7:5: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘long unsigned int’ [-Wformat=]
printf("The 'short int' data type is\t %d bytes\n", sizeof(short int));
^
helloworld.c:8:5: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘long unsigned int’ [-Wformat=]
printf("The 'long int' data type is\t %d bytes\n", sizeof(long int));
^
helloworld.c:9:5: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘long unsigned int’ [-Wformat=]
printf("The 'long long int' data type is %d bytes\n", sizeof(long long int));
^
helloworld.c:10:5: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘long unsigned int’ [-Wformat=]
printf("The 'float' data type is\t %d bytes\n", sizeof(float));
^
helloworld.c:11:5: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘long unsigned int’ [-Wformat=]
printf("The 'char' data type is\t\t %d bytes\n", sizeof(char));
^
Compilation finished successfully.

最佳答案

您正在尝试打印 sizeof operator 的返回值,该值通常是 size_t 类型。

看来,在您的情况下, size_ttypedeflong unsigned int ,因此它要求使用它的兼容格式说明符 %lu 。这里的返回值无关紧要,您的问题在于类型不匹配。

注意:要获得可移植的代码,在基于 C99 和转发标准的编译器上使用 %zu 是安全的。

关于C 中 sizeof() 返回值的正确格式说明符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27296011/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com