C程序打印出意外的单词.这是怎么发生的?

Gra*_*ler -2 c arrays floating-point return puts

有谁知道这是如何工作的?

C程序来源:

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

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

Fell
Run Code Online (Sandbox Code Playgroud)

为什么这个节目会显示"Fell"?

Iha*_*imi 6

它与字节表示有关1.143139e+27,确切地说Fell,但没有终止nul字节.

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

#include <stdio.h>

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

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

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

#include <stdio.h>

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

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这意味着改变float b[] = {1.143139e+27};,到float b[] = {1.14314e+27};