Andere Möglichkeit zum einlesen von verschiedenen Eingaben?



  • Hallo @ All!!

    Ich lese auf diese Art verschiedene Strings ein:

    int i,n = 0;
    char *eingabe = malloc(sizeof(char));
    
    for(n = 0;(i = getchar()) != '\n' && i  != EOF; n++)
    {
      eingabe[n]= i;
      eingabe = realloc(eingabe,n+2);				
    }
    

    Jetzt zu meiner Frage gibt es fürs einlesen eine elegantere Lösung als diese?

    mfg



  • Schonmal scanf() probiert ? - liest strings jeweils bis zum Whitespace.

    Deine Art, realloc zu bemühen, kommt ohne Netz und doppelten Boden, das ist riskant. Bitte immer überprüfen, ob Du den Speicher auch wirklich bekommen hast, sonst löst Du bestenfalls einen "segmentation fault" aus. Wenn Du Pech hast, suchst Du ewig nach so einem Fehler.



  • OK danke erstmal und wie mache ich das genau bei diesen Beispiel mit NULL überprüfen??



  • entweder auf NULL oder 0 überprüfen



  • Also reicht es wenn:

    ich nach:

    char *eingabe = malloc(sizeof(char));
    

    so überprüfe:

    if(eingbae == NULL)
    {
    //Fehlermeldung
    }
    

    Ist es überhaupt möglich wieder etwas anzufodern wenn ich einmal NULL zurückbekomme??



  • hanni6al schrieb:

    Also reicht es wenn: ...

    Nicht ganz, korrekt macht man es über einen temporären Pointer, damit Dir der alte Pointer nicht verloren geht. Guckst Du hier: http://www.c-plusplus.net/forum/viewtopic.php?t=206606, Abschnitt 3.2.

    hanni6al schrieb:

    Ist es überhaupt möglich wieder etwas anzufodern wenn ich einmal NULL zurückbekomme??

    Rein theoretisch schon, kann ja sein, daß eine andere Routine zwischenzeitlich mit free() Speicher zurückgegeben hat. Meist bedeutet das aber, daß Du irgendwo ein Memory Leak hast, also Speicher allozierst, ohne ihn wieder zurückzugeben.


Anmelden zum Antworten