如何解釋列印自己的程式?

時間 2021-06-03 08:55:43

1樓:時國懷

先按行分解開,這個程式一共有6行:

charb=

0x22

;charn=

0xa;

char*c

="char b = 0x22;char n = 0xa;char *c=%c%s%c;main()"

;main

()前面定義了三個變數,後面是main函式裡乙個輸出。

然後把輸出裡的printf展開,把c和b都替換成具體的值:

printf

("char b = 0x22;char n = 0xa;char *c=%c%s%c;main()"

,0x22

,"char b = 0x22;char n = 0xa;char *c=%c%s%c;main()"

,0x22

);根據printf函式的原型:printf(格式, 引數1,引數2...引數N)可以判斷出來,這個printf的功能是

輸出乙個串,串裡有%c%s%c是格式控制,分別對應變數的值是b,c,b三個值。

最後看看0x22,它是按照%c輸出的,它是引號

那麼單純的從功能上說,它輸出的過程是:

列印一堆字元,加乙個引號,再列印一堆同樣的字元,再列印乙個引號,再把前面沒列印完的內容列印出來。

用乙個表示式來表示一下:

假設字串S=A+B,那麼程式內容應該是A+引號+S+引號+B,那麼輸出的東西會跟原始碼是一樣的。

所以,可以判斷出來,中間的那個char n = 0xa是打醬油的。

當然,A,B裡不能有除引號以外的其它轉義字元,比如\n,\t等等。控制好這些,那麼剩下的就是根據這個公式構造程式了。

但是,這個程式是正確的嗎?不,不正確。因為它沒有包含標頭檔案,在gcc下編譯會失敗,實際上許多編譯器也會編譯失敗。

所以,說到底,這個只能算是乙個程式設計師的文字遊戲了。

如何解釋誤會

到底吃了幾碗粉 人生以後這種事多的很 我猜你說的tf應該是種口紅牌子 因為之前好像聽說過 你想用的初心是為了那種貪小便宜的快感 不然你為什麼不經他人允許就用他人的東西?但是被發現了 你這種貪小便宜性格不改的話以後這種事也不會消失所以解決這個問題有2個辦法 改掉你貪小便宜的性格,給你表姐說清楚這件事,...

如何解釋通俗的解釋資訊瓶頸方法?

若羽 1 對於模型量化壓縮的方法,資訊瓶頸理論可以算作是一種學說解釋。2 對於貝葉斯深度學習,資訊瓶頸方法基於互信襲,同時也建模了深度學習的不確定性。3 知道哪些特徵是相關可解釋的,哪些特徵是冗餘的,又可以和對抗樣本結合起來。 柳楓 小白提出點自己的看法,求大神輕拍。表示對於先記住,再壓縮的說法表示...

如何解釋孔子的「忠恕」?

忠即為心,盡心為人。忠是乙個人做人的準則或者原則,他內心對是非善惡判別的標準,直白地說就是你忠於什麼?你的三觀是什麼?這就是忠。大學 裡有講 心正 有原則的人才有忠,忠就是原則。恕也是心,指的是胸懷,包容之心。恕是說內心有原則,但不死守原則。就好比別人不小心踩你一腳,你非要讓人家給你道歉才肯罷休,雖...