在C中,如果scanf()
中的參數不存在&
,則不會生成編譯錯誤;相反,顯示的結果是錯誤的(即發生語義錯誤)。缺少C中的訪問說明符並不會導致編譯錯誤
考慮下面的代碼:
char str[30];
int a;
printf("Enter the value");
scanf("%s %d", str, a); // This is the statement in question.
printf("You entered %s %d", str, a);
在這裏,我知道str
是一個字符數組,因此將有一個基本地址,因而不會產生編譯錯誤。但爲什麼a
參數&
的缺席不會導致編譯錯誤?
另外str
給出正確的輸出,但整數總是產生值-28770作爲輸出。爲什麼是這樣?
你在輸入什麼?你期望的結果是什麼? –
「始終將-28770作爲輸出的整數」 - 未初始化的局部變量「a」。包含在聲明前的那個內存位置(堆棧或寄存器)。每次運行可能相同,每次可能會有所不同;這就是爲什麼它是「未定義的行爲」。 - 你的編譯器沒有警告過你嗎? – JimmyB
好的。編譯器沒有給出任何警告。謝謝回答。 – Gon