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.


Anmelden zum Antworten