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};
有人知道这是怎么回事吗?
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};