當我第一次被介紹給C時,我被告知總是在函數的頂部聲明我的變量。現在我對語言有了很強的把握,我將重點放在編碼風格上,特別是限制了我的變量範圍。我已閱讀了限制範圍的好處,並且我遇到了一個有趣的例子。顯然,C99可以讓你做到這一點...我在哪裏可以合法地在C99中聲明一個變量?
for (int i = 0; i < 10; i++)
{
puts("hello");
}
我原本以爲變量的作用域是由周圍花括號{ }
最內側限制,但在上面的例子中int i
出現在被限制範圍由for循環的花括號包括,即使它是在它們之外聲明的。
我試圖擴展上面的例子fgets()
做我認爲是類似的東西,但這兩個都給了我一個語法錯誤。
fgets(char fpath[80], 80, stdin);
*見注**
fgets(char* fpath = malloc(80), 80, stdin);
所以,只要在那裏它到底是合法的,在C99聲明變量? for循環示例是規則的例外情況嗎?這是否也適用於while
和do while
循環?
*注**:我什至不知道這將是語法正確,即使我能有聲明字符數組,因爲fgets()
正在尋找字符指針不字符指針的陣列80 。這就是我試用malloc()
版本的原因。
不管它是否合法,你都不應該這樣調用malloc,因爲你沒有檢查它是否返回NULL,也不能釋放你正在分配的堆內存,因爲fpath會立即超出範圍。 – Jeff 2015-01-01 22:06:05