2017-12-08 5 views
-1

コードは、ファイルをA.TXTするfileReceivedに入ったどんなデータ追加することになっているが、代わりにそれはランダムな値が移入されます。(良くないので、ランダムにも間違いなくありませんが取り込まれます正しい値)。私は何かを逃していますか?C内のファイルへの書き込み、ガベージ値が

File *fp; 
fp = fopen("a.txt",+a); 
while(1) 
{ 
    fileReceived =...// getting char array of 1024 size 
    fwrite(fileReceived,1,sizeof(fileReceived),fp); 

    if(padding!=0) 
    { 
     fclose(fp); 
     break; 
    } 
} 
+3

[最小限で完全で検証可能な例](https://stackoverflow.com/help/mcve) – user3386109

+0

誰がパディングを設定していますか?どこでfileReceivedを定義しましたか? – farbiondriven

+1

'sizeof(fileReceived)'はおそらく1024ではなくポインタのサイズです。 –

答えて

2

あなたは右の部分を示すいない場合でも、推測(それ以外にはできません):

fileReceived =...// getting char array of 1024 size 
fwrite(fileReceived,1,sizeof(fileReceived),fp); 

fileReceivedはそうsizeof(fileReceived)はないが、データ上のポインタなければなりません1024になりますが、アーキテクチャに応じて4または8(配列を別の配列に割り当てることはできません)

ループ内のデータが少なすぎるため、ファイルに最初の値が得られますが、最後の値は取得されません。あなたのサイズを知っているので、このようにそれを修正:

int size = 1024; 
... 
fwrite(fileReceived,1,size,fp); 

データサイズが変化する場合、あなたはあなたへのポインタを提供してどんな関数からサイズ情報を取得するを持っている、またはあなたが未定義の動作を取得します

+0

ありがとうございます。両方のケースであなたは正しいのです。私は1024以前しか使用していませんでした。 –

+0

は、私がデータをチェックし、最後のパケットのサイズは1024で、私は適切に、すべての詳細を投稿し、その割り当てのために、したがって、私は、全体のコードを投稿することができないことができませんでした申し訳ありませんではありません。 –

+0

問題ありません。最後のパケットは 'fwrite'のサイズを変更する特殊なケースでなければなりません。しかし、あなたはサイズ、どちらかのフルサイズ(サイズがより低くなるまで、あなたは1024 substractすることができます)、または各繰り返しでを知っている必要があります。 –

関連する問題