用于打印 size_t 值的便携式代码?

Portable code for printing size_t values?

我正在使用看起来像

的 C 代码片段
char buf[16];
size_t i = 6;

sprintf(buf, "%d", i);

...当函数需要 'int'.

时,编译器警告我第三个参数是 'size_t' 类型

所以我试着告诉它它将得到一个无符号整数

sprintf(buf, "%u", i);

现在编译器警告我第三个参数是 'size_t' 类型,而函数期望 'unsigned int'.


根据我在其他 questions/answers 上读到的关于这个问题的内容,我不能假设 size_t 是一个无符号整数,这解释了警告。


编辑:

在有人提出建议之前,我正在寻找一种解决方案,该解决方案实际上可以解决出现问题的微小可能性。所以通过

强制类型转换
sprintf(buf, "%d", (int)i);

sprintf(buf, "%u", (unsigned int)i);

不受欢迎。

C99 和 C11 需要一个 z 修饰符:

sprintf(buf, "%zu", i);

如果 MS Visual Studio 也必须容纳,生活可能会更艰难(因为它不符合 C99 或 C11 标准)。根据 MSDN,您需要使用 I 而不是 z