2011-04-13 112 views
1

的數量,當我從標準像這樣寫着:如何得到讀取的字節

size_t bufSize = 1024; 
unsigned char inputBuffer[bufSize]; 
size_t readNum = 0; 
readNum = fread(inputBuffer, sizeof(unsigned char) * bufSize, 1, stdin); 
在readNum

存儲對象的數量,這意味着當我從標準輸入讀取1024個字節,readNum的值爲1。但是當我從標準輸入<讀取1024個字節時,比readNum的值爲0.問題是,當數字小於1024時,如何識別從標準輸入讀取的字節數?

回答

2

使用readNum = fread(inputBuffer, sizeof(unsigned char), bufSize, stdin);

你」請嘗試閱讀bufSize元素,每個元素的大小爲sizeof(char) - 不是一個大小爲bufSize * sizeof(char)的元素 - 因此您的fread調用應該反映這一點。

+0

是的,謝謝,那是工作。 – 2011-04-13 12:59:48

1
size_t fread (void * ptr, size_t size, size_t count, FILE * stream); 

fread讀取給定大小的塊並返回成功讀取塊的數量。 如果你想回到你想讀讀然後塊大小設置爲1字節數和塊的字節數的數量:

readNum = fread(inputBuffer, 1, sizeof(unsigned char) * bufSize, stdin); 
+0

這是從一個字節後從標準輸入讀取效率低下,我創建了動態數組,其中我從inputBuffer存儲值,並在週期中重新分配動態數組,當我從標準輸入讀取1個字節的bufSize時,性能爲cca 12 MB /秒。但是,當我的bufSize大小爲256 K字節時,讀取性能爲509 MB/s。所以我的想法是,有這個256KB緩衝區,當readNum是0時,比從inputBuffer只存儲讀取字節,但是如何? – 2011-04-13 12:24:53

+0

改爲使用較低級別的函數read()。 – codymanix 2011-04-13 16:32:57

0
readNum = fread(inputBuffer, 1, sizeof(unsigned char)*bufSize, stdin);