避免覆盖数组

时间:2010-11-19 05:05:14

标签: c++

有没有办法可以避免重写数组?在我的实现中,我必须将数据写入固定大小的缓冲区/数组buff[100]并且每当我想要o / p数据时将使用buff[100]我将写入buff[100](即下次我使用buff[100]时,你会再次使用相同的buff[100]吗?它应该附加数据。

2 个答案:

答案 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()调用更改为您正在使用的任何调用。

答案 1 :(得分:0)

既然你提到C ++,你为什么不使用std :: vector或类似的容器?它会更多更简单,更不容易出错。