Arraygröße "dynamisch machen"
lima-city → Forum → Programmiersprachen → C/C++ und D
anzahl
array
ausgeben
buchstabe
code
definieren
file
flag
http
inhalt
manipulieren
problem
schleife
string
textdatei
url
vektor
windows
zeichen
zelle
-
Servus,
ich will wörter aus einer textdatei buchstabe für buchstabe in ein array einlesen. leider muss ich schon im programmcode definieren, wie viele "zellen" das array haben soll. (z.B. char strings[200])
da die anzahl der zeichen in der textdatei variiren können, ist es ineffizient irgendeine zahl auf gut glück zwischen die beiden eckigen klammern zu schreiben.
gibt es da eine möglichkeit, das array dynamisch zu definieren?
mfg splinto -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Dazu würde ich auf malloc zurückgreifen.
Siehe http://www.cplusplus.com/reference/clibrary/cstdlib/malloc/ -
Ja, natürlich geht das: http://www.cplusplus.com/reference/clibrary/cstdlib/malloc/
€dit: Ach Mensch, zu langsam
Beitrag zuletzt geändert: 19.2.2010 13:22:25 von kochmarkus -
vielen dank euche beiden, aber damit bin ich leider nicht ganz zurecht gekommen.
ich habe es jetzt anders gelöst, einfach das array nach folgender schleife definiert:
while(!dataInput.eof()) { dataInput.get(getChar); if(!dataInput.eof()) { index_inputChar++; } } char strings[index_inputChar];
damit habe ich jetzt das array mit soviel "zellen" genau der anzahl von zeichen entsprechend.
leider habe ich jetzt wieder ein problem.
nach dem definieren des arrays muss ich nochmal eine schleife durchlaufen lassen, um jedes zeichen in das array zu füllen.
jetzt ist das EOF flag aber schon gesetzt.
ich habe versucht mit iso_base::clear() das flag wieder auf 0 zu setzen, aber die schleife wird trozdem nicht durchlaufen...
Beitrag zuletzt geändert: 19.2.2010 18:45:17 von splinto -
splinto schrieb:
while(!dataInput.eof()) { dataInput.get(getChar); if(!dataInput.eof()) { index_inputChar++; } } char strings[index_inputChar];
Korrigiert mich, wenn ich komplett daneben liege, aber da hast du auch erst zur Laufzeit die tatsächliche Größe... Und wie willst du dann zur Compilezeit das Feld anlegen? Auch in diesem Fall musst du malloc() verwenden um einen Speicherbereich in der passenden Größe zu allokieren. Den Compiler will ich sehen, der dir das kompiliert. gcc tuts mal auf keinen Fall... -
@ schrotti
liegt evtl. daran, dass ich nicht den ganzen sourcecode gepostet habe?
aber irgendwie hast du recht, die tatsächliche größe von strings[] wird erst zur runtime bekannt...
ich benutze gcc und er kompiliert ohne meckern, aber wenn es dann darum geht das array zu manipulieren schließt mir windows mein programm.
ich habe auf grund meines problems einen zweiten stream gemacht der einfach nur zum füllen des arrays da ist.
wenn ich dann den inhalt des arrays ausgeben lasse wird alles auch korrekt ausgegeben, also bis hier ist mal nix falsch.
aber wenn ich dann in das array andere buchstaben speichern will meckert eben windows rum. aber beim kompilieren gibt es keine probleme
@nikic
dataInput.seekg (0, ios::beg); funktioniert offensichtlich irgendwie nicht, dann wenn ich wenn ich den inhalt des arrays in die konsole ausgeben will, wird eben nichts ausgegeben... -
Ich persönlich würde ja einfach einen STL Vector benutzen. ( Es handelt sich um C++, ja? ;D)
Mit dem STL Vector ist das wesentlich einfacher und weniger fehleranfällig. :D
Also
http://www.cplusplus.com/reference/stl/vector/ -
erstmal allen hier vielen dank.
ich habs mal mit den vektoren probiert weil ich für malloc offensichtlich zu blöd bin.
ich habe zwar etwas gebraucht, dass es mit den vektoren funktioniert, aber jetzt tut es genau so wie ich will
vektoren for the win!!!
nochmal ein großes DANKE!
mfg splinto -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage