有誰知道這是如何工作的?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個字節後停止的時間 –