%zu
和 %lu
在 C 中的字符串格式化有什么区别? %lu
用于unsigned long
值,%zu
用于size_t
值,但实际上,size_t
只是一个 unsigned long
。 CppCheck 提示它,但根据我的经验,这两种类型都适用。
%zu
只是格式化 size_t
的一种标准化方式,因为 size_t
是常用的,还是还有更多?
最佳答案
but in practice,
size_t
is just anunsigned long
不一定。有些系统具有 32 位 long
和 64 位 size_t
。 MSVC 就是其中之一。
鉴于以下情况:
printf("long: %zu\n", sizeof(long));
printf("long long: %zu\n", sizeof(long long));
printf("size_t: %zu\n", sizeof(size_t));
在 x86 模式下在 MSVC 2015 下编译输出:
long: 4
long long: 8
size_t: 4
在 x64 模式下编译时输出:
long: 4
long long: 8
size_t: 8
为 size_t
设置单独的尺寸修饰符可确保您使用正确的尺寸。
关于c - C 中 %zu 和 %lu 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73167243/