ERLEDIGT
NEIN
NEIN
ANTWORTEN
2
2
ZUGRIFFE
723
723
EMPFEHLEN
-
31.03.08 16:36 #1
- 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:
in der Ausgabe steht dann dieser MÜLL "a¾è".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; }
So um den Hyroglyphen-KRAM aus dem Speicher zu löschen
kann man es ja auch so machen:
in der jetzigen Ausgabe steht das was da auch stehen soll nähmlich "a".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; }
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)
-
01.04.08 05:56 #2
- Registriert seit
- Mar 2004
- Beiträge
- 441
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)
-
01.04.08 20:47 #3
- Registriert seit
- Jan 2005
- Beiträge
- 60
Hi,
Danke für Deine geniale Antwort.
ich habe es natürlich gleich ausprobiert:Die Ausgabe des Strings endet aber erst mit dem ersten '\0'.
Die Ausgabe ist nun "a" auch ohne das der reservierte Speicher extra durch die Schleife muss, echt genial, DANKE !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; }
Ähnliche Themen
-
Dynamisches Array erstellen
Von soa im Forum PHPAntworten: 5Letzter Beitrag: 26.11.07, 20:06 -
globales dynamisches array
Von hibbert im Forum Visual Basic 6.0Antworten: 3Letzter Beitrag: 02.07.07, 16:36 -
dynamisches struct array
Von sawamin im Forum C/C++Antworten: 4Letzter Beitrag: 12.02.05, 21:43 -
Dynamisches Array
Von Chrone im Forum .NET ArchivAntworten: 4Letzter Beitrag: 05.11.04, 08:42 -
[c++] zweidimensionales dynamisches array
Von andreas_gierisch im Forum C/C++Antworten: 34Letzter Beitrag: 22.10.04, 14:22





Zitieren
Login






