tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
2
ZUGRIFFE
723
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Kleiner Wicht Kleiner Wicht ist offline Mitglied Silber
    Registriert seit
    Jan 2005
    Beiträge
    60
    Hi,

    kann mir mal jemand sagen wie man ein char Array richtig erstellt bzw. initialisiert, jedesmal wenn ich mit char arbeite stehen Hyroglyphen in meinem Array.

    Hier ein Beispiel:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
     
            int M = 500; // grösse eigentlich unbekannt
            char *DATA = new char[M];
            if(DATA != NULL)
            {
                    DATA[0] = 'a';
                    ShowMessage(DATA);
     
                    delete(DATA);
                    DATA = NULL;
            }
    in der Ausgabe steht dann dieser MÜLL "a¾è".


    So um den Hyroglyphen-KRAM aus dem Speicher zu löschen
    kann man es ja auch so machen:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
     
            int M = 500; // grösse eigentlich unbekannt
            char *DATA = new char[M];
            if(DATA != NULL)
            {
                    for(int g=0; g < M; g++)
                            DATA[g] = '\0';
     
                    DATA[0] = 'a';
                    ShowMessage(DATA);
     
                    delete(DATA);
                    DATA = NULL;
            }
    in der jetzigen Ausgabe steht das was da auch stehen soll nähmlich "a".

    Jetzt möchte ich eigentlich nur eines wissen ob man das so generell (nullterminiert) macht oder ob es einen anderen Weg gibt ?
    Geändert von Kleiner Wicht (03.04.08 um 20:52 Uhr)
     

  2. #2
    Registriert seit
    Mar 2004
    Beiträge
    441
    Zitat Zitat von Kleiner Wicht Beitrag anzeigen
    Jetzt möchte ich eigentlich nur eines wissen ob man das so generell (nullterminiert) macht oder ob es einen anderen Weg gibt ?
    Da man sich generell in C++ (unabhängig vom Betriebssystem und Framework) darauf geeinigt hat, Strings immer nullterminiert zu behandeln ist die zweite Methode die passende, wenn du deine Strings zeichenweise (z.B. mittels DATA[0] = 'a'; ) aufbauen willst. Der wesentliche Unterschied in deinen beiden Varianten besteht darin, dass im ersten Fall, wie du schon sagtest, aller möglicher Müll in dem für das Array reservierten Speicher stehen kann. Die Ausgabe des Strings endet aber erst mit dem ersten '\0'. Genau das ist aber bei deiner zweiten Variante gegeben.

    Wenn du also mit Strings arbeiten willst und die jeweiligen Char-Arrays einzeln von Hand füllst (z.B. bei Fileoperationen), dann empfiehlt es sich immer, wie in deinem zweiten Beispiel, vorher den verwendeten Speicher auf \0 zu setzen.
    Geändert von CSANecromancer (02.04.08 um 06:31 Uhr)
     

  3. #3
    Kleiner Wicht Kleiner Wicht ist offline Mitglied Silber
    Registriert seit
    Jan 2005
    Beiträge
    60
    Hi,

    Danke für Deine geniale Antwort.
    Die Ausgabe des Strings endet aber erst mit dem ersten '\0'.
    ich habe es natürlich gleich ausprobiert:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
     
    int M = 500; // grösse eigentlich unbekannt
    char *DATA = new char[M];
    if(DATA != NULL)
    {
             DATA[0] = 'a';
             DATA[1] = '\0';
             ShowMessage(DATA);
     
             delete(DATA);
             DATA = NULL;
    }
    Die Ausgabe ist nun "a" auch ohne das der reservierte Speicher extra durch die Schleife muss, echt genial, DANKE !
     

Ähnliche Themen

  1. Dynamisches Array erstellen
    Von soa im Forum PHP
    Antworten: 5
    Letzter Beitrag: 26.11.07, 20:06
  2. globales dynamisches array
    Von hibbert im Forum Visual Basic 6.0
    Antworten: 3
    Letzter Beitrag: 02.07.07, 16:36
  3. dynamisches struct array
    Von sawamin im Forum C/C++
    Antworten: 4
    Letzter Beitrag: 12.02.05, 21:43
  4. Dynamisches Array
    Von Chrone im Forum .NET Archiv
    Antworten: 4
    Letzter Beitrag: 05.11.04, 08:42
  5. [c++] zweidimensionales dynamisches array
    Von andreas_gierisch im Forum C/C++
    Antworten: 34
    Letzter Beitrag: 22.10.04, 14:22