跳轉到內容

C 程式設計/stdio.h/ungetc

來自華夏公益教科書,開放的書籍,為開放的世界

Ungetc 是 C 標準庫函式 ungetch 的一個版本。它是一個受限的函式。

int ungetc (int c, FILE *stream)

這裡,c 是一個字元變數,stream 是一個檔案指標,整個函式用整數資料型別表示。

如上所述,它是一個受限版本的 ungetch,該函式將由 c 的值指定的字元推回。在推回時,字元 c 被轉換為 unsigned char 然後推回輸入 stream。如果對流應用 getc 函式,則可以將推回的字元返回。

呼叫容量

[編輯 | 編輯原始碼]

一次呼叫只允許推回一個字元。嘗試連續推回可能無法正常工作。在正常和通常的做法中,該函式被呼叫 4 次,因此連續推回 4 個字元。這意味著該函式的過程完全依賴於機器。因此,如果機器中的記憶體很大,則有可能無限次地推回字元。

返回值

[編輯 | 編輯原始碼]

推回的字元將由流上的任何後續讀取(反向順序)返回,如果流來自緩衝,則意味著最後推回的字元將首先返回。當正常推回字元時,該函式返回最後一個推回的字元。如果推回操作沒有正確完成,意味著推回字元不成功(例如,如果檔案未開啟),則返回 EOF 字元作為錯誤。不能使用 ungetc 將 EOF 字元推回流。成功呼叫 ungetc 函式會清除流的 EOF 指示符。

要擦除來自呼叫 ungetc 函式的推回字元,在從流中讀取字元之前,需要呼叫 fseekfsetposfflush 函式。由於所有推回的字元都被讀取,因此檔案位置指示符與推回字元之前的狀態相同。

Ungetcungetch 的受限版本

[編輯 | 編輯原始碼]

如前所述,它是函式 ungetch 的受限版本,它有相同的限制,就像讀取操作緊隨寫入操作或反之亦然時一樣。這就是為什麼需要在 ungetc 和隨後的 writeread 函式之間進行中間重新定位的原因。

華夏公益教科書