2017-12-08 3 views
-1

Der Code soll alle Daten, die er in fileReceived bekommt, an a.txt Datei anhängen, aber stattdessen wird er mit zufälligen Werten gefüllt. (Naja, nicht so zufällig, aber definitiv nicht die korrekte Werte). Verpasse ich etwas?Schreiben in eine Datei in c, wird Müllwert aufgefüllt

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

[minimales, vollständiges und überprüfbares Beispiel] (https://Stackoverflow.com/help/mcve) – user3386109

+0

Wer setzt Padding? Wo hast du fileReceived definiert? – farbiondriven

+1

'sizeof (fileReceived)' ist wahrscheinlich nicht 1024, sondern die Größe des Zeigers. –

Antwort

2

Erraten (aber kann nicht anders sein), auch wenn Sie nicht den rechten Teil zeigt:

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

fileReceivedhat ein Zeiger auf Daten sein, so sizeof(fileReceived) ist nicht 1024, aber 4 oder 8, je nach Ihrer Architektur (da es nicht möglich ist, ein Array einem anderen Array zuzuordnen)

Sie schreiben zu wenige Daten in Ihre Schleife und Ihre Datei erhält die ersten Werte, aber nicht die letzten. Da Sie die Größe wissen, repariert es so:

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

wenn die Datengröße variiert, Sie haben, um die Größe Informationen zu erhalten, aus welcher Funktion den Zeiger auf Dich liefert, oder du wirst undefiniertes Verhalten bekommen

+0

danke. Du hattest Recht für beide Fälle. Ich habe 1024 nur früher verwendet. –

+0

Ich überprüfte die Daten und das letzte Paket hat nicht die Größe 1024. Sorry, ich konnte nicht alle Details richtig posten, es ist für eine Zuweisung und daher kann ich nicht den ganzen Code posten. –

+0

kein Problem. Das letzte Paket muss ein Spezialfall sein, in dem Sie die Größe des 'fwrite' ändern, das ist alles. aber Sie müssen wissen, die Größe, entweder voller Größe (so können Sie 1024 abziehen, bis die Größe niedriger ist als das) oder bei jeder Iteration. –