c - C 中 %zu 和 %lu 的区别

标签 c printf string-formatting size-t

%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 an 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));

在 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/

相关文章:

python - 为什么更改 .format 中的变量后,字符串格式的全局变量仍保持不变?

字符串指针数组中的 C char qsort

c - 获取终止我的进程的 "User signal 1",C 中的 UNIX

c - C 中带有终止符的动态数组

c - 在C中读取字符时打印

matlab - 你如何在matlab中格式化文本输出的复数

c++ - 如何在非对齐位置将 char 数组转换为 int?

c - 无法打印 char* 字符串

c - scanf 和转换说明符的问题

c# - 如何获得字符串操作?