C String länge begrenzt?
-
Hi,
ich schreib grad an nem Programm das aus dateien auliest und die verarbeitet. Ich habe dateien die über 8.00 Zeilen haben.Nun folgendes problem:
ich deklariere am anfang über "# define MAX 81". So wenn ich das Programm starte leufts, wenn ich jetzt aber zum Beispiel "# define MAX 801" mache stürtzt das Programm ab, Kompilieren tut er ohne Fehler.meine Variable:
char firstline [MAX][MAX];
char otherline[MAX][MAX];Ich brauche diese Variablen weil ich über das erste Feld die linie angebe und in dem zweiten den Buchstaben.
muss ich da ne .h datei laden, dass mehr geht?
oder liegt das an windows, das nur einen begrenzten Speicher zur verfügung stellt? Wenn ja, kann ich das dann auch ändern?HELP!!!
-
Laut MSDN:
Ein CString-Objekt kann bis zu INT_MAX (2.147.483.647) Zeichen speichern.
-
Achtung! Mit [MAX][MAX] bringst Du die Länge einer Zeile in Abhängigkeit zur Anzahl der Zeilen. Das kann nicht gewollt sein.
Und ja, bei statischen/globalen Variablen gibt es compilerspezifisch Limits.
Fordere solche großen Bereiche besser mit new/malloc zur Laufzeit an.
-
Danke,
leuft, ich habe einfach [MAX][BU] gemacht => zeilen bleiben, buchstaben sind net mehr gleich großDanke für eure schnelle antwort!
Dennoch versteh ich net was du meinst xD, sind das Befehle? wenn ja BITTE mach mir ein kleines Beispiel!
Fordere solche großen Bereiche besser mit new/malloc zur Laufzeit an.
mfg
Miykeal
-
ich dachte hier gehts um MFC und in dem Fall is doch ne CStringList geradezu ideal. Man braucht nix zu reservieren und die is in länge und zeichenlänge flexibel und passt sich automatisch der länge an
-
Absolut richtig.
Die Verwendung des alten ANSI char hat auch noch viele weitere Nachteile.
Unter Windows sind fast alle dazugehörigen Fkt inkl. printf() nicht Threadsafe, man muss sich um alle Konvertierungen selbst kümmern und sich
auch noch um Speicher Sorgen machen.Ganz schlimm ist aber auch das Anlegen grosser Felder auf dem Stack.
Ja, und die MFC-Library bietet wirklich komfortable CStrings an ...