Problem mit strcpy und AnsiString
-
Hallo,
Ich möchte einen Wert vom Typ AnsiString dem char-Feld eines Structs zuweisen.
struct TDongle { unsigned int uiDongle_ID; // (...) short sMdl1_Jahr; short sMdl1_Monat; char cMdl1_Modul[6]; // besagtes Feld char cMdl1_Versionsnr[4]; int iMdl1_Bearbeitungsnr; int iMdl1_Laufendenr; char cMdl1_Checksumme[1]; // (...) }; TDongle Dongle; AnsiString asAusdruck = "abcdef"; strcpy(Dongle.cMdl1_Modul, asAusdruck.c_str());
Obwohl sichergestellt ist, dass asAusdruck max. 6 Zeichen lang ist, werden aus mir unerklärlichen Gründen mehr Zeichen zugewiesen. Das zeigt sich, wenn ich Dongle.cMdl1_Modul in einer MessageBox anzeige.
Kann es an strcpy in Zusammenhang mit AnsiString liegen?
Wäre dankbar für'n Tipp.Gruß
Leo
-
"abcdef" passt nicht in char[6]. Du musst das terminierende Nullzeichen mitzählen.
-
MFK schrieb:
"abcdef" passt nicht in char[6]. Du musst das terminierende Nullzeichen mitzählen.
Großes Problem - kleine Lösung.
Danke!Ich hab' gerade ein ziemlich flaues Gefühl im Bauch, da ich ähnliche Zuweisungen schon x-Mal gemacht habe. Wieso hat sich das bisher nicht als Fehler herausgestellt. Habe ich einfach Glück gehabt oder ist das Ergebnis einer solchen Zuweisung unbestimmt?
Gruß
Leo
-
Da wirst du wohl Glück gehabt haben. Du schreibst über die Grenzen des char-Arrays hinaus, das Nullzeichen wird in den dahinterliegenden Speicher geschrieben. Auf den heute üblichen Plattformen werden Variablen an Vier-Byte-Grenzen ausgerichtet, also würde das Probleme verursachen, wenn die Größe des Arrays ein Vielfaches von vier wäre.