我尝试使用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次额外的迭代,导致您从原始内存中打印空