Array auf dem Heap und ganz normales Array. Was ist besser?
-
Hier sind zwei verschiedene Funktionen zum einlesen von Strings. Die erste ist aus meinem Übungsbuch, in dieser wird ein char Array auf dem Heap reserviert, und es geht dann alles über den Zeiger *Array. Meine Funktion is eigentlich fast die gleiche nur dass ich es ohne eine Reservierung auf dem Heap mache, sondern ganz normal ein char Array deklariere. So gibts da jetzt Unterschiede? Die werden das in meinm Buch doch nicht zum Spaß auf dem Heap reserviert haben?? Und was is daran besser das char Array auf dem Heap zu reservieren und alles über einen Zeiger zu machen, anstatt ein ganz normales char Array zu deklarieren.
Dankeschön schon mal im Voraus.//1. void GetString1(string &s,int maxlength) //aus dem Buch { char *Array=new char[maxlength]; cin.get(Array,maxlength); s=Array; } //2. void GetString2(string &s,int maxlength) //meine { char Array[maxlength]; cin.get(Array,maxlength); s=Array; }
-
Stromberg schrieb:
So gibts da jetzt Unterschiede?
Klar: Deine funktioniert nicht. Stack-Speicher muss zur Compilezeit feststehen, d.h. man kann feste Arrays nur mit konstanten, zur Compilzeit feststehenden Größen initialisieren.
-
Konrad Rudolph schrieb:
Klar: Deine funktioniert nicht.
"Funktioniert nicht" stimmt hierbei nicht ganz. Der Code ist so nicht standardkonform, läßt sich aber auf vielen Compilern trotzdem kompilieren und funktioniert dort auch.
Jetzt bleibt eigentlich nur noch die Frage, wozu man die ganze Funktion überhaupt braucht, wenn man doch einfach
void GetString(string &s) //aus dem Buch { getline(cin,s); }benutzen kann. Dann braucht man nichtmal eine maximale Länge, sondern die wird dynamisch festgelegt...
Felix :xmas2: