C 程序打印意外字。这是怎么发生的?

C Program Prints Unexpected Word. How does this happen?

有人知道这是怎么回事吗?

C程序源码:

int main ()
{
    float b[] = {1.143139e+27};
    puts(b);

    return 0;
}

输出:

Fell

为什么这个程序会显示"Fell"?

它与 1.143139e+27 的字节表示有关,它正好是 Fell,但没有终止 nul 字节。

你可以做相反的过程,比如

#include <stdio.h>

int main()
{
    char b[] = {'F', 'e', 'l', 'l'};
    fprintf(stdout, "%g\n", *(float *)b);

    return 0;
}

甚至添加一个终止 nul 字节,

#include <stdio.h>

int main()
{
    char b[] = {'F', 'e', 'l', 'l', '[=11=]'};
    fprintf(stdout, "%g\n", *(float *)b);

    return 0;
}

这意味着将 float b[] = {1.143139e+27}; 更改为 float b[] = {1.14314e+27};