2017-08-17 17 views
1

バッファに書き込まれたCのソケットを通してメッセージを受け取りました。メッセージには終端記号(@@)が付いているので、いつバッファに書き込むのを止めるかはわかりますが、バッファはメッセージよりもはるかに大きいです。ターミネーターを含めずに書き込む方法はありますか?バッファの残りの部分を取り除きますか?ファイルに書き込むときにターミネータを除外します

多分位置ポインタを持つものはありますか?

char *pos; 
FILE* fp = fopen("tempfile", "w+"); 
pos = strstr(buffer, "@@"); 
pos = '\0'; // Maybe I could stop the writing with NULL? 

fwrite(buffer, 1, BUF_SIZE /*too big*/, fp); 
fclose(fp); 

メッセージを含むバッファの部分のサイズを取得するか、特定の文字まで自分のファイルに書き込む必要があります。どちらの方法でも動作します。

+3

'fwrite(バッファ、1、posバッファ、fp)'? –

答えて

3

ステートメントfwrite(buffer, 1, BUF_SIZE, fp)は、バッファの実際の内容にかかわらず、'\0'が「文字列終了」とみなされているかどうかにかかわらず、BUF_SIZEバイトを書き込みます。 唯一の方法は、書き込みする要素の正しい数をfwriteに伝えることです。これは簡単にポインタ算術演算によって計算することができます。もちろん

fwrite(buffer, 1, pos-buffer, fp) 

、あなたはpos != NULL場合などをチェックする必要があります。しかし、私はこれがまっすぐだと思います。

関連する問題