1. 程式人生 > >fork與printf

fork與printf

下一段程式碼,當給不同的命令列引數(大於0的正整數)時,請問輸出多少個 '-' 符號?

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char *argv[]) {
	if (argc != 2)
		return -1;
	for (int i = 0; i < atoi(argv[1]); i++) {
		fork();
		printf("-");	// printf("-\n");
	}
	return 0;
}

有註釋的哪一行兩個printf,它們相互替換,結果一樣嗎?不一樣的話,結果是什麼?

下面是結果:


方框內的證明如下:


當然了,這個規律也不是普遍成立的,因為printf的緩衝機制,當printf("-")時會將 '-' 存到緩衝區,當 '-' 的個數大於等於緩衝區大小的時候,就會輸出了;

如果是printf("-\n")的話,就是立馬輸出 '-' 啦~,結合fork,很容易求得輸出 '-' 的個數。

值得注意的是:在統計輸出次數的時候不能使用管道,否則又有緩衝啦!!!你不信就試試~