Über das Problem des Lesens und Schreibens von Dateien in verschiedenen Prozessen von C/C++

        Verwenden Sie in Prozess A C, um die Datei entsprechend dem Strukturinhalt zu schreiben, während Prozess B in C ++ geschrieben ist. Beispielsweise muss der Schnittstellenprozess den von A geschriebenen Dateiinhalt lesen und ihn dann auf der Schnittstelle anzeigen. Manchmal auch kann auf diese Situation stoßen: Nachdem das Schreiben in A abgeschlossen ist, drucken und testen Sie den geschriebenen Inhalt in A und lesen Sie ihn aus. Alles ist in Ordnung. Ob beim Schreiben oder Lesen, die Dateninformationen sind in Ordnung. Beim Kopieren der entsprechenden Struktur in C zu C++ Beim Lesen der Datei (auch mit derselben Lesefunktion) wird festgestellt, dass die Daten nicht ganz richtig sind, einige sind richtig und andere falsch. Sollten wir die Lesemethode oder etwas anderes ändern?

        Wenn Sie das Problem lösen möchten, müssen Sie zuerst den Grund finden. Andernfalls kann es sein, dass das Problem dieses Mal zufällig gelöst wird, Sie es aber immer noch nicht wissen. Daher werden Sie es beim nächsten Mal, wenn Sie auf eine ähnliche Situation stoßen, tun Ich bin immer noch verwirrt und die vorherige Methode funktioniert möglicherweise nicht mehr (ein bisschen Unsinn. .).

        Der Hauptgrund für diese Situation könnte die Inkonsistenz zwischen der Kompilierungsmethode des Compilers und der Speicherausrichtung der Struktur in den beiden Sprachen sein. Die empfohlene Methode besteht darin, #pragma pack(n) und #pragma pack() am oberen und unteren Rand der Struktur in C und C++ hinzuzufügen, wie im folgenden Codesegment gezeigt, um den Compiler anzuweisen, n Zeichen beim Kompilieren zu drücken Bei der Abschnittsausrichtung wird n im Allgemeinen als Wert 1 verwendet, und es ist besser, eine externe „C“-Schicht hinzuzufügen, die im C-Modus außerhalb von C++ kompiliert wurde.

#ifdef __cplusplus
extern "C"
{
#endif
 
#pragma pack(1)
typedef struct XXX{
    //结构体内容
} xxx;
 
#pragma pack() 
#ifdef __cplusplus
}
#endif

Guess you like

Origin blog.csdn.net/DIANZI520SUA/article/details/129440336