komishce Initialisierung meines Char Arrays?



  • hallo,

    warum ist mein char[25] in einer Struktur automatisch mit komischen Zeichen initialisiert? Nach dem ich ein Object erzeugt habe.

    wie kann ich es vermeiden? oder wie kann ich neu initalisieren?

    typedef struct 	 
    {
    	BYTE ucText[25];	 
    	S_DATUMSBEREICH s_datumsbereich;	 
    	BYTE ucFuellbyte; 					 
    }S_FORMAT_TEXT_KURZ;
    

    S_FORMAT_TEXT_KURZ test;

    die folgende Zuweisung funktioniert. also kriege ich Warnung "L-Wert erwartet "
    test.ucText = "meinText".c_str(); // oder ein char * auch nicht. warum?

    Das wäre schön , wenn jemand mir helfen könnte...

    vielen Dank

    Marek



  • Hallo,

    ein Array ist kein lvalue. Daher darfst Du das nicht machen:

    TYPE array[1234];
    
    array = irgendwas;
    

    Da must Du dann schon memcpy oder strcpy benutzen.

    mfg Martin



  • Danke für den tipp. es hat sehr geholfen.
    ich habe jetzt immer mit Leerzeichen die Array initailisiert. Es scheint zu funktionieren. vielleicht git es noch bessere Lösung. erstmal bin ich damit zufreiden.

    noch eine letzte frage:
    wie kann ich jetzt char Array zu String umwandeln?

    danke



  • Hallo

    Da dein Array nur aus PODs (Plain Old Datatype) besteht, werden die Array-Elemente nicht automatisch initialisiert, das must du schon selber machen. Dein Vorgehen, überall Leerzeichen reinzuschreiben, ist eine Möglichkeit. Besser ist es, einfach das erste Arrayelement auf 0 zu setzen (auf 0 und nicht '0'!). Dann kannst du dieses Array auch gleich als C-String verwenden.

    Von Array in (Ansi- ) String umzuwandeln ist einfach : Einfach dem String zuweisen. Das funktioniert allerdings nur, wenn das Array mindestens ein Element mit dem Wert 0 beinhaltet, damit es nullterminiert ist.

    bis bald
    akari



  • Sorry. es sollte Byte Array sein, kein Char Array.
    Deswegen hat es nicht funktioniert mit der Umwandulung zu String? wie kann man bitte es machen?

    Ich habe mein Byte Array mit Leerzeichen initalisiert, somit kann ich die restlichen komischen Zeichen auch überschreiben. dabei hat die Initalisierung des erten Elementes mit 0 nicht geholfen...

    wie kann ich jetzt von Byte Array AnsiString gewinnen und umgekehrt? entschuldigung. so viele dumme Fragen von mir...

    Danke



  • Hallo

    Ich habe mein Byte Array mit Leerzeichen initalisiert, somit kann ich die restlichen komischen Zeichen auch überschreiben. dabei hat die Initalisierung des erten Elementes mit 0 nicht geholfen...

    Das Setzen des ersten Elementes auf 0 soll ja auch nur sicherstellen, das der Inhalt des Arrays als nullterminierter C-String verwendet werden kann. Die restlichen Elemente des Arrays sind technisch gesehen davon nicht betroffen.

    wie kann ich jetzt von Byte Array AnsiString gewinnen und umgekehrt?

    Dann mußt du ein C-String vortäuschen

    Byte array[10];
    array[0] = 'a';
    array[1] = 0;
    const char* cstring = array;
    AnsiString string = cstring;
    

    Aber das ist nur gültig, wenn mindestens ein Element in array auf 0 gesetzt ist, und alle Elemente davor nur druckbare Zeichen beinhalten, die String auch darstellen kann.

    bis bald
    akari



  • Danke Akari. Es hat mir viel geholfen...


Log in to reply