今天在使用sprintf格式化字符串的时候是这样做的
unsigned int i = 88;
char buf[20];
sprintf_s(buf, "%d", i);
std::cout << buf << std::endl;
程序运行结果:
这样做看似没有问题,但实际上会出现较大的问题。原因在于%d是格式化有符号整型。看以下代码
unsigned int i = 3444622162;
char buf[20];
sprintf_s(buf, "%d", i);
std::cout << buf << std::endl;
出问题的原因在于有符号整型和无符号整型表示的范围是不一样的。printf也是一样的。
具体解决办法:
d 有符号10进制整数
i 有符号10进制整数
o 无符号8进制整数
u 无符号10进制整数
即将%d换成是%u就可以了