2016-10-22 83 views
-2
int main() 
    { 

     printf("Hello World!");   
     printf("%s");//printing Hello World again why? 

    } 

此代碼打印「Hello World!」兩次。爲什麼會發生這樣的事情?C:僅使用字符串格式作爲參數的printf

+2

我想你的意思是'printf(「%s」);' –

+0

未定義的行爲。在這種情況下,過去的東西(指向字符串的指針)在現在被使用 - 函數調用期望從未給出的參數。回答這個問題並沒有真正的目的。 – enhzflep

+0

因爲您遇到未定義的行爲。你碰巧通過編寫錯誤的代碼來獲取內存的內容。如果你做了一件完全錯誤的事情,當你得到一些無法解釋的結果時,你不會感到驚訝。 「 –

回答

3

printf("%s")導致未定義的行爲。

一旦你在你的程序中有該行,你的整個程序就變得沒有定義,可以做或不做任何事情。

最有可能的,通過完整的運氣,你的籌碼仍然包含指針從一個呼叫的文字字符串,因此功能仍然能夠正確執行。

+1

」* ...完成[壞]運氣... *「 – alk