Es schreibt 0000 0000 0000 85fd 0804 0001 für jeden fwrite(buff,sizeof(int16_t), sizeof(buff),rawf); während ich erwarten würde, nur zu bekommen 0000 0000 0000.
Was bedeuten die zusätzlichen Daten? 85fd 0804 0001 und wie verhindere ich das?
(Fast) minimales und vollständiges Beispiel, beobachtete Ausgabe, erwartete Ausgabe. Sie, Sir, verdienen eine Medaille. 😀
– DevSolar
22. Juli 2015 um 7:36 Uhr
Guter alter Pufferüberlauf 🙂
– Luan
22. Juli 2015 um 8:09 Uhr
Mohit Jain
Was bedeuten die zusätzlichen Daten? 85fd 0804 0001
Möglicherweise einige zufällige Mülldaten.
wie kann ich verhindern, dass es auftritt?
fwrite(buff,sizeof(int16_t), sizeof(buff),rawf); sollte geschrieben werden als:
fwrite(buff,sizeof(int16_t), sizeof(buff) / sizeof(buff[0]),rawf);
/* ^ ^^^^^^^^^^^^^^^ */
/* size of each object Count of objects */
/* (2) (3) */
/* or */
fwrite(buff, sizeof buf[0], sizeof buff / sizeof buff[0], rawf);
sizeof buff / sizeof buff[0] erhält die Array-Länge in Anzahl von Objekten (oder Mitgliedern) while sizeof buff Gibt die Größe des Arrays in Bytes an.
Sie lesen also an der vorbei buff und Schreiben in die Datei und Aufrufen undefiniertes Verhalten. In Ihrem Fall sehen Sie, dass die zufälligen Mülldaten in die Ausgabedatei geschrieben werden.
In Ihrem Fall, sizeof von jedem Element in buff ist 2 Byte und buff Das Array hat 3 Mitglieder, wodurch die Gesamtgröße 6 Byte beträgt. Wenn du schreibst fwrite(buff,sizeof(int16_t), sizeof(buff),rawf);werden 6 Objekte mit je 2 Byte in die Datei geschrieben, was Sie nicht möchten.
Jetzt schreiben Sie 6 Daten vom Typ (Größe) int16_t ab buff[0] dh buff[0..5] zum Ausgang. buff[0..2] sind 0s wie erwartet und buff[3..5] sind Müll.
Wäre es nicht besser zu verwenden sizeof(buff[0]) auch für das Argument der Elementgröße?
– Oberst Zweiunddreißig
22. Juli 2015 um 14:28 Uhr
@ColonelThirtyTwo Ja, das ist vorzuziehen.
– Mohit Jain
22. Juli 2015 um 14:54 Uhr
Das dritte Argument von fwrite ist der Nummer von Elementen der durch den zweiten Parameter angegebenen Größe. Es ist nicht die Gesamtgröße in Bytes, was Sie gerade tun.
Sie überlaufen also Ihren Puffer.
12046100cookie-checkOverhead-Daten beim Schreiben in eine Binärdateiyes
(Fast) minimales und vollständiges Beispiel, beobachtete Ausgabe, erwartete Ausgabe. Sie, Sir, verdienen eine Medaille. 😀
– DevSolar
22. Juli 2015 um 7:36 Uhr
Guter alter Pufferüberlauf 🙂
– Luan
22. Juli 2015 um 8:09 Uhr