Eth*_*man 76 c size-t platform-independent format-specifiers format-string
我想size_t在C中打印出一个类型的变量,但似乎size_t在不同的体系结构上别名为不同的变量类型.例如,在一台计算机(64位)上,以下代码不会抛出任何警告:
size_t size = 1;
printf("the size is %ld", size);
Run Code Online (Sandbox Code Playgroud)
但在我的另一台机器(32位)上面的代码会产生以下警告消息:
警告:格式'%ld'需要类型'long int*',但参数3的类型为'size_t*'
我怀疑这是由于指针大小的不同,所以在我的64位机器size_t上别名为a long int("%ld"),而在我的32位机器size_t上别名为另一种类型.
是否有专门用于的格式说明符size_t?
Ada*_*eld 110
是:使用z长度修饰符:
size_t size = sizeof(char);
printf("the size is %zu\n", size); // decimal size_t ("u" for unsigned)
printf("the size is %zx\n", size); // hex size_t
Run Code Online (Sandbox Code Playgroud)
可用的其他长度修饰符是hh(for char),h(for short),l(for long),ll(for long long),j(for intmax_t),t(for ptrdiff_t)和L(for long double).参见C99标准的第7.19.6.1(7)节.
max*_*zig 40
就在这里.它是%zu(如ANSI C99中所规定的).
size_t size = 1;
printf("the size is %zu", size);
Run Code Online (Sandbox Code Playgroud)
请注意,这size_t是无符号的,因此%ld是双重错误:错误的长度修饰符和错误的格式转换说明符.如果你想知道,%zd是ssize_t(签名).
| 归档时间: |
|
| 查看次数: |
44783 次 |
| 最近记录: |