#include <iostream>
#include <stdio.h>
using namespace std;
int main() {
printf("stdout buffer total size: %d\n", stdout->_bufsiz);
printf("stdout buffer used size: %d\n", stdout->_cnt);
cout << "asdf";
printf("stdout buffer total size: %d\n", stdout->_bufsiz);
printf("stdout buffer used size: %d\n", stdout->_cnt);
return 0;
}
輸出顯示 `_bufsiz` 為 0,且 `cout << "asdf"` 後 `_cnt` 仍為 0,看似緩衝區未使用。
#include <iostream>
#include <stdio.h>
#include <windows.h> // Sleep
using namespace std;
int main() {
// 設置用戶緩衝區,便於觀察
char buf[50];
setbuf(stdout, buf); // 全緩衝,50 字節
for (int i = 1; i <= 20; ++i) {
cout << i;
if (i % 10 == 0) fflush(stdout); // 手動刷新
Sleep(100);
}
return 0;
}
運行時會看到每 10 個數字批量輸出一次,證明緩衝區確實存在且可控。
`_bufsiz` 為 0 是 MSVC 實現細節;`cout` 不刷新是緩衝機制使然。用 `setbuf` 自定義緩衝區並配合 `fflush` 可直觀觀察緩衝行為。