2010-11-19 4 views
1

Есть ли способ, с помощью которого можно избежать перезаписи массива? В моей реализации я должен написать данные в буфер/массив фиксированного размера, скажем buff[100], и будет использовать buff[100] всякий раз, когда я хочу получить данные o/p, я напишу buff[100] (т. Е. Вы снова будете использовать тот же buff[100]) в следующий раз Я использую buff[100], он должен добавить данные.Избегайте перезаписи на массиве

+7

Если вы ставите периоды после каждого предложения, мы сможем понять вас лучше. Полное предложение и хорошее правописание действительно помогают, особенно когда вы просите о помощи. Зачем кому-то тратить больше сил, отвечая на ваш вопрос, который вы спрашивали? –

+0

код пожалуйста (отформатированный пожалуйста) –

ответ

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 :: vector или подобный контейнер? Это было бы много проще и менее подвержено ошибкам.

Смежные вопросы