2010-11-19 199 views
1

是否存在這樣可以避免陣列的overwritting什麼辦法?我在執行我將數據寫入到緩存/固定大小的數組說buff[100]和將要使用buff[100]每當我想O/P數據我會寫信給buff[100](即會再次使用相同的buff[100])時,下一次我使用buff[100]它應該追加數據。避免覆蓋在陣列

+7

如果你把時間每個句子後,我們也許能更好地瞭解您。完整的句子和良好的拼寫確實有幫助,特別是當你尋求幫助時。爲什麼人們會花更多的精力回答你問過的問題? – 2010-11-19 05:08:20

+0

代碼請(請格式化) – 2010-11-19 05:14:42

回答

2

維護索引到陣列。當您要寫入的數據的長度加上索引大於或等於100時,寫出緩衝區和數據。否則,將數據移入該偏移處的緩衝區,並將數據的長度添加到索引。

例如,假設以下變量範圍:

#define BUFFER_LENGTH 100 
char buffer[BUFFER_LENGTH]; 
int buffer_index; 
int output_fd; 

你可以有這樣的功能:

void write_buffered(char *data, int data_length) 
{ 
    if (data_length + buffer_index >= BUFFER_LENGTH) { 
     write(output_fd, buffer, buffer_index); 
     write(output_fd, data, data_length); 
     buffer_index = 0; 
     return; 
    } 

    memcpy(&buffer[buffer_index], data, data_length); 
    buffer_index += data_length; 
} 

這是寫C語言風格,因爲我知道的C好過C++,但基本原則是健全的。顯然,避免使用全局變量並將write()調用更改爲您正在使用的任何調用。

0

既然你提到C++,你爲什麼不使用一個std ::向量或類似容器?這將是更簡單,更容易出錯。