C Eingabe einlesen über Funktion und übergeben des Arrays an die main



  • Halli hallo,
    ich zermartere mir jetzt schon seit Stunden das Hirn, und zusätzlich bin ich echt schlecht im suchen, weshalb mir die Suchfunktion leider so gar nicht weiter geholfen hat.

    Ziel:
    Ich will mit einer funktion stringinput() einfach nur ein Wort aus der Eingabezeile einlesen und das ganze an die Mainfunktion schicken.
    Hier mein Lösungsansatz:

    #define MAXSTRINGLENGTH 100
    char **stringinput();
    
    int main() {
      char **out;
      out = stringinput();
    
      printf("Das war dann: %s\n", out);
    
     return 0; 
    }
    
    char **stringinput() /* stringinput liest fehlerfrei einen einzelnen string aus der keyboardeingabe ein und gibt einen string zurück*/
    {
      char *x; /*Ein Pointer ist nichts anderes als ein Array, das * ist der Inhaltsoperator*/
    
     if (!(x = (char *) malloc(MAXSTRINGLENGTH*sizeof(char)))) {
       return 1;
     }
     printf("Bitte einen Wert eingeben (Maximal %i Zeichen): ", MAXSTRINGLENGTH-1);
     scanf("%s", x);   
    
     printf("Du hast\n  %s\neingetippt\n", x);
    
     return x;
    }
    

    Leider bin ich in Zeigern noch nicht sonderlich bewandert, kein Wunder also, dass das Ganze nicht so funktioniert wie ich wohl will. Ich hab wie gesagt schon Stundenlang rumprobiert, deshalb wäre ich über jeden noch so kleinen Hinweis dankbar
    lg
    sopi



  • EDIT: sry hab vergessen die blöde kommentarzeile zu löschen, das fehlerfrei kann man natürlich getrost streichen und durch ein sollte ersetzen 🙄



  • Du hast dort einen Stern zu viel untergebracht - ersetz mal die "char**" (Zeiger auf char*(-Array) aka String-Array) durch "char*" (Zeiger auf char(-Array) aka String), dann sollte es funktionieren.

    PS: Außerdem hast du vergessen, den reservierten Speicher wieder freizugeben - und die scanf() prüft auch nicht, ob der Platz ausreicht für die Eingabe.

    PPS: Das C-Board ist zwei Etagen weiter oben 😉



  • Dieser Thread wurde von Moderator/in CMatt aus dem Forum C# und .NET in das Forum ANSI C verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • @Forenwahl: Oh man sorry für die Umstände, .. wie blind kann man sein?

    @CStoll: Danke für die schnelle Antwort, aber ich muss gestehen, ich verstehe nicht wo ich den Stern zu viel habe *läuftrotan*
    (das mit der Längenprüfung ist nicht so schlimm, weil's nur dateinamen sein sollen die eingelesen werden, aber wenn du mir erklären magst wie's funktioniert, immer her damit. Im Augenblick is mir aber eigentlich wichtiger, dass es überhaupt mal was einliest *sfz*)



  • sopi schrieb:

    @CStoll: Danke für die schnelle Antwort, aber ich muss gestehen, ich verstehe nicht wo ich den Stern zu viel habe *läuftrotan*

    Sowohl bei der Variable, die in der main() deklariert wird, also auch beim Rückgabetyp der stringinput()-Funktion reicht der Typ "char*" aus.

    (das mit der Längenprüfung ist nicht so schlimm, weil's nur dateinamen sein sollen die eingelesen werden, aber wenn du mir erklären magst wie's funktioniert, immer her damit. Im Augenblick is mir aber eigentlich wichtiger, dass es überhaupt mal was einliest *sfz*)

    Bei den scanf()-Formatkennungen kannst du auch eine Maximallänge per "%100s" angeben (dort direkt den Inhalt von MAXSTRINGLENGTH reinzucoden, wird etwas schwieriger, ist aber machbar) - wenn du flexibler sein willst, funktioniert auch scanf("%*s",MAXSTRINGLENGTH,x); (bei der Reihenfolge bin ich mir aber nicht sicher).



  • Es funktioniert!
    Danke danke danke danke *verbeug* 😃

    OT: So, nächstes Mal würde ich das gerne alleine können, .. meine bisherige Quelle ist http://de.wikibooks.org/wiki/C-Programmierung
    Aber irgendwie ist das so gar nicht das Gelbe vom Ei. Ich hab schon einiges in php programmiert, vielleicht komm ich gerade deshalb einfach nicht mit der Variablendeklaration in C zurecht.
    Wenn du also noch einen Link zu ner C Dokumentation für phpler hast, dann würd ich aus allen Wolken fallen 😛


Anmelden zum Antworten