Tot*_*tem 4 c string types string-formatting
我有以下代码:
#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));
}
Run Code Online (Sandbox Code Playgroud)
哪些输出:
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
Run Code Online (Sandbox Code Playgroud)
但这就是问题,编译器要求我使用%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.
Run Code Online (Sandbox Code Playgroud)
在 C 中,表达式的类型sizeof是size_t。
printf要使用的说明符是%zu. 例子:
printf("The 'int' datatype is \t\t %zu bytes\n", sizeof(int));
Run Code Online (Sandbox Code Playgroud)
从 1999 年版本的 C 标准开始就可以使用它了。
您正在尝试打印sizeofoperator的返回值,它通常是 type size_t。
在您的情况下,它似乎size_t是 a typedefof long unsigned int,因此它要求%lu使用兼容的格式说明符。这里的返回值无关紧要,您的问题在于类型不匹配。
注意:要获得可移植的代码,%zu在基于 C99 和前向标准的编译器上使用,是安全的。
| 归档时间: |
|
| 查看次数: |
5360 次 |
| 最近记录: |