有谁知道这是如何工作的?C程序打印神秘的字。这是如何发生的?
C程序来源:
int main()
{
float b[] = {1.143139e+27};
puts(b);
return 0;
}
输出:
Fell
为什么会这样的程序显示 “打倒”?
有谁知道这是如何工作的?C程序打印神秘的字。这是如何发生的?
C程序来源:
int main()
{
float b[] = {1.143139e+27};
puts(b);
return 0;
}
输出:
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', '\0'};
fprintf(stdout, "%g\n", *(float *)b);
return 0;
}
这意味着改变float b[] = {1.143139e+27};
,以float b[] = {1.14314e+27};
它可能不起作用,因为不能保证“b”被适当对齐。 –
@LưuVĩnhPhúc是真实的,但我认为重点是解释为什么它在它的工作时起作用。 –
浮子'1.143139e + 27' = hex'46656C6C' = ascii'Fell' –
使用实现定义的方面可能会导致未定义的行为r ...这个问题是无效的。 – Sebivor
未定义的行为。没有人知道字符串在这4个字节后停止的时间 –