-2

0 で埋められた大きな char 配列があります。受信ファイルをソケットから読み取り、その内容をバッファに配置します。すべての '\0' を含むバッファーを書き込めないため、正しいサイズの新しいバッファーを割り当てて書き込みます。私はそれを行うためにこのアプローチを使用しました:

int i = 0;
while(buf[i] != '\0'){
    i++;
}
char new[i];
while(i){
    new[i] = buf[i];
    i--;
}
new[0] = buf[0];

このアプローチは機能しますが、最もスマートまたは最もエレガントな方法とは思えません。char配列から末尾のNULL文字をすべて削除する最良の方法は何ですか?

4

3 に答える 3

2

これを行う簡単な方法は次のとおりだと思います。

size_t len = strlen(buf); // will calculate number of non-0 symbols before first 0
char * newBuf = (char *)malloc(len); // allocate memory for new array, don't forget to free it later
memcpy(newBuf, buf, len); // copy data from old buf to new one
于 2014-09-26T22:32:04.023 に答える
1

私の最初のアイデアは、ストリームから受け取る文字数を数え、そのバイト数を一度にファイルに書き込むことです。

それが不可能な場合は、あまり賢くないアプローチに進みます。

int i = BUFFER_SIZE - 1;
while((i>=0) && (buffer[i--] == '\0'));
++i;

その後、iバッファの長さが含まれます。

于 2014-09-26T22:39:53.477 に答える
0

NULL プロパティを利用できます。このデータを NULL 文字なしでコピーするだけです。このように len = strlen(buf); // total_char + 1 のみを読み取っていることを確認します。このバッファから len-1 文字のみをファイルにコピーします。必要に応じて、新しいバッファーも準備できます。

于 2014-09-26T22:33:33.307 に答える