关于length specifier

size_t定义了一个unsigned integer,但是具体所占用字节数依赖系统位数,如何才能可移植地打印size_t?

答案是:%zu格式化字符串。

 

示例:

size_t val = get_the_value();
printf("%zu",val);

z是长度指定符(length specifier),表示参数长度是size_t的长度。

英文说明:

z  --- A following integer conversion corresponds to a size_t or ssize_t argument.

 

对于较老的库(C99之前的)可以使用如下方式:

printf("value: %" PRId32, some_int32_t);

printf("value: %" PRIu16, some_uint16_t);

在inttypes.h头文件中可以找到。

但是还是建议使用:unsigned long long 或者 long long ,然后使用%llu 或者 %lld 格式.

 

最后,附上z限定符的一般使用示例:

size_t x = ...;

ssize_t y = ...;

printf("%zu\n", x); // prints as unsigned decimal

printf("%zx\n", x); // prints as hex

printf("%zd\n", y); // prints as signed decimal

 

 

 

 

 

你可能感兴趣的:(c++基础)