我正在使用一段看起来像
的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);
是不受欢迎的。
答案 0 :(得分:0)
C99和C11需要z
修饰符:
sprintf(buf, "%zu", i);
如果MS Visual Studio也必须适应,生活可能更难(因为它不符合C99或C11标准)。根据{{3}},您需要使用I
代替z
。