kostenloser Webspace werbefrei: lima-city


Arraygröße "dynamisch machen"

lima-cityForumProgrammiersprachenC/C++ und D

  1. Autor dieses Themas

    splinto

    Kostenloser Webspace von splinto, auf Homepage erstellen warten

    splinto hat kostenlosen Webspace.

    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
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. d***********a

    Dazu würde ich auf malloc zurückgreifen.

    Siehe http://www.cplusplus.com/reference/clibrary/cstdlib/malloc/
  4. kochmarkus

    Co-Admin Kostenloser Webspace von kochmarkus

    kochmarkus hat kostenlosen Webspace.

    Ja, natürlich geht das: http://www.cplusplus.com/reference/clibrary/cstdlib/malloc/

    €dit: Ach Mensch, zu langsam :frown:

    Beitrag zuletzt geändert: 19.2.2010 13:22:25 von kochmarkus
  5. Autor dieses Themas

    splinto

    Kostenloser Webspace von splinto, auf Homepage erstellen warten

    splinto hat kostenlosen Webspace.

    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
  6. Guckst du hier und da bei "Binary files".
  7. schrotti12

    Moderator Kostenloser Webspace von schrotti12

    schrotti12 hat kostenlosen Webspace.

    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...
  8. Autor dieses Themas

    splinto

    Kostenloser Webspace von splinto, auf Homepage erstellen warten

    splinto hat kostenlosen Webspace.

    @ 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...
  9. 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/
  10. Autor dieses Themas

    splinto

    Kostenloser Webspace von splinto, auf Homepage erstellen warten

    splinto hat kostenlosen Webspace.

    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 :biggrin:
    vektoren for the win!!!

    nochmal ein großes DANKE!

    mfg splinto
  11. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!