C语言 为什么sprintf添加'H'最后呢?



我尝试使用sprintf将143.5添加到s,但是当我打印s时,后面有一个额外的H。

有人能解释一下吗?我只是好奇。

谢谢!

(也很抱歉我的英语不好)

代码:

#include <stdio.h>
#include <string.h>
int main(int argc, char const *argv[])
{
char s[5 + 1];
sprintf(s, "%5.1f", 143.5);
for (int i = 0; i <= strlen(s) + 1; i++)
{
printf("%c", s[i]);
}
printf("n");
return 0;
}

结果:

143.5H

您正在超出数组的范围,您可能正在访问内存中的旧数据或随机数据。结果你打印了一些意想不到的东西。这就是所谓的未定义行为。

您需要从0循环到< strlen(...)。执行<=+1会使它进行2次额外的迭代,导致您从原始内存中打印空和这个H字符。

另一个解决方案(如@Tom_Karzes所提到的)是使用s[i] != ''作为循环的退出测试,假设您的字符串正确地以空结束。

最新更新