C 中 %zu 和 %lu 的区别

Bro*_*m35 6 c printf size-t string-formatting

%zuC 中的字符串格式化和之间有什么区别%lu%lu用于unsigned long值并%zu用于size_t值,但实际上,size_t只是一个unsigned long. CppCheck 对此有所抱怨,但根据我的经验,这两种类型都适用。

只是%zu一种标准化的格式化方式,size_t因为size_t很常用,还是还有更多内容?

dbu*_*ush 9

但在实践中,size_t这只是一个unsigned 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));
Run Code Online (Sandbox Code Playgroud)

在 x86 模式下的 MSVC 2015 下编译输出:

printf("long: %zu\n", sizeof(long));
printf("long long: %zu\n", sizeof(long long));
printf("size_t: %zu\n", sizeof(size_t));
Run Code Online (Sandbox Code Playgroud)

在 x64 模式下编译时输出:

long: 4
long long: 8
size_t: 4
Run Code Online (Sandbox Code Playgroud)

有一个单独的尺寸修饰符可size_t确保您使用正确的尺寸。

  • @Brogolem35是的,“z”修饰符专门用于“size_t”,因此无论“size_t”的大小如何,它都是正确的。 (3认同)