的Apple developer documentation狀態:fgets的n參數的含義是否隨時間而改變?
爲
fgets
安全注意:雖然fgets
功能提供了讀取數據的數量有限的能力,就必須使用時要小心。像「更安全」列中的其他功能一樣,fgets
始終終止字符串。但是,與該列中的其他函數不同,它需要讀取的最大字節數,而不是緩衝區大小。
最後一句對我來說聽起來不對。爲了比較,這裏是what POSIX says:
的
fgets()
功能必須從閱讀流字節到陣列指向s
直到n-1
字節被讀入,或<newline>
被讀出並傳送到s
,或最終OF-文件條件遇到。在讀入數組的最後一個字節之後立即寫入空字節。
這裏是an ISO C draft from 2005 says:
的
fgets
函數讀取比n
從流中指定的字符數少至多一個指向stream
到陣列通過s
指向。換行符(保留)或文件結束後不會讀取其他字符。在讀入數組的最後一個字符後立即寫入空字符。
FreeBSD的手冊頁說一樣的C標準和POSIX。
這讓我覺得蘋果文檔顯然是錯誤的。最簡單的解釋是,蘋果公司在發表這篇文章時並不知情。但雖然很簡單,但這個假設對我來說並不合理。
蘋果是否有其他原因可能偏離C標準的措辭?
該文件是錯誤的。手冊頁是正確的。 – user3386109
更準確地說:文檔不對或者'fgets'實現不符合。我猜這是前者。 –
POSIX似乎很清楚:「直到讀取n-1個字節」 –