用于打印size_t值的可移植代码?

时间:2015-05-24 23:44:55

标签: c type-conversion

我正在使用一段看起来像

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

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

...并且编译器警告我第三个参数的类型为' size_t'当函数期待' int'。

所以我试着告诉它它会得到一个unsigned int

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

现在编译器警告我第三个参数的类型为' size_t'当函数期望' unsigned int'。

从我读到的关于这个问题的其他问题/答案,我不能假设size_t是一个unsigned int,它解释了警告。

  • 那么我怎样才能重新编写这一行,以便编译器满意 (即编译器是静默的)?

修改

在有人建议之前,我正在寻找一种解决方案,它可以解决出现问题的可能性。因此,通过

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

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

是不受欢迎的。

1 个答案:

答案 0 :(得分:0)

C99和C11需要z修饰符:

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

如果MS Visual Studio也必须适应,生活可能更难(因为它不符合C99或C11标准)。根据{{​​3}},您需要使用I代替z