C99和C11提供%zd转换说明匹配sizeof的返回类型:
printf("%zd",sizeof(long long));
如果使用%d
会得到以下报错
warning: format specifies type 'int' but the argument has type 'unsigned long' [-Wformat]
printf("%d",sizeof(long long));
~~ ^~~~~~~~~~~~~~~~~
%lu
1 warning generated.
可以看到,sizeof返回的类型是unsigned long
而%d是int类型的说明符
%zd同样适用于strlen()函数
#include<stdio.h>
#include<string.h>
int main()
{
printf("%zd",strlen("fdfsfsdsfsd"));
}
如果使用%d,同样会报错:
warning: format specifies type 'int' but the argument has type 'unsigned long' [-Wformat]
printf("%d",strlen("fdfsfsdsfsd"));
~~ ^~~~~~~~~~~~~~~~~~~~~
%lu
1 warning generated.
注意如果系统不支持%zd,可使用%u或者%lu代替%zd。