#define _putc_lk(_c,_stream) (--(_stream)->_cnt >= 0 ? \
0xff & (*(_stream)->_ptr++ = (char)(_c)) : _flsbuf((_c),(_stream)))
_cnt:緩衝區剩餘可寫字節數。遞減後若 ≥ 0,直接寫入緩衝區並推進指針 _ptr。_flsbuf 刷新至文件(最終調用 WriteFile),並重置 _ptr、_cnt。同一 FILE* 先 getc 後 putc 會導致寫入失敗。調試發現:
getc 後 _flag = 137(讀模式)。putc 後 _flag = 138(寫模式)。_flag = 138 可恢復寫入。緩衝區設計本可同時支持讀寫,但為避免讀寫指針交錯導致數據混亂,CRT 在首次操作時鎖定模式。這可能是實現簡化或為防止邏輯錯誤的保護機制。
putc 僅在流處於寫模式(_flag 允許寫)時有效。跨平台代碼不應依賴同一文件指針交替讀寫,建議分別打開或使用 fopen 模式 "r+" 並手動管理同步。