我最近寫了一個簡單的程序,我錯誤地使用scanf()而不是printf()在控制檯上顯示消息。我期待得到編譯時錯誤,但它編譯好沒有在運行時崩潰&崩潰。我知道scanf()用於從鍵盤輸入。我不應該在下面的程序中遇到錯誤嗎?爲什麼要傳遞字符串scanf()在C中編譯好?
#include <stdio.h>
int main()
{
scanf("Hello world"); // oops, It had to be printf()
return 0;
}
它調用未定義的行爲(UB)嗎? C標準中有沒有提到這個?爲什麼在編譯時沒有檢查是否將適當的&有效參數傳遞給scanf()函數?
無法重現崩潰。該程序運行良好。 – EOF
該代碼看起來對我來說是正確的,並且應該在編譯和運行時正常完成。你怎麼知道它'崩潰'?什麼是碰撞症狀? – CiaPan
我敢肯定,語法暗示:沒有失敗編譯和*沒有*崩潰 –