2010-11-19 12 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などのコンテナを使用してみませんか? 多くはとなり、エラーが起こりにくくなります。