我想打印出一个类型的变量 size_t 在 C 中,但似乎 size_t 不同架构上不同变量类型的别名。例如,在一台机器(64 位)上,以下代码不会引发任何警告:

size_t size = 1;
printf("the size is %ld", size);

但在我的另一台机器(32 位)上,上面的代码会产生以下警告消息:

警告:格式“%ld”期望类型“长int *”,但参数3具有'size_t *'的类型

我怀疑这是由于指针大小的差异造成的,因此在我的 64 位机器上 size_t 别名为 long int ("%ld"),而在我的 32 位机器上 size_t 是另一种类型的别名。

有没有专门针对的格式说明符 size_t?

有帮助吗?

解决方案

是的:使用 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

其他可用的长度修饰符是 hh (为了 char), h (为了 short), l (为了 long), ll (为了 long long), j (为了 intmax_t), t (为了 ptrdiff_t), 和 L (为了 long double)。请参见 C99 标准第 7.19.6.1 (7) 节。

其他提示

就在这里。这是 %zu (如 ANSI C99 中指定)。

size_t size = 1;
printf("the size is %zu", size);

注意 size_t 是无符号的,因此 %ld 是双重错误:错误的长度修饰符和错误的格式转换说明符。如果你想知道, %zd 是为了 ssize_t (已签名)。

微软软件定义网络, ,表示 Visual Studio 支持在 32 和 64 位平台上移植代码的“I”前缀。

size_t size = 10;
printf("size is %Iu", size);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top