String als Rückgabewert bei Funktion



  • Hallo! Ich möchte eine eigene EINLESE Fkt. erstellen wie scanf() nur das meine mit ESC beendet werden kann. Dazu benötige ich eine Funktion die ein Wort(Zeichenkette) als Rückgabewert zurück geben kann.
    Soetwas in der Art meine ich: (Aber leider geht das nicht!)

    #include<stdio.h>
    char eingabe();
    void main()
    {
        char wort[20];
        wort = eingabe();
        printf("%s",wort);
    }
    char eingabe()
    {
        char string[]="meinwort";
        return(string);
    }
    

    Ich kenn mich nicht gut aus, ich arbeite seit 4 Stunden jetzt dran und suche erfolglos im Internet herum -> bitte um Hilfe! Danke!



  • #include <iostream>
    #include <string>
    
    std::string eingabe();
    
    int main()
    {
        const std::string wort = eingabe();
        std::cout << wort << std::endl;
        return 0;
    }
    
    std::string eingabe()
    {
        return "meinwort";
        /* oder wenn du wert auf deine variante legst:
        const std::string wort("meinwort");
        return wort;*/
    }
    

    edit: Tags...
    edit2: Hm, irgendwie mit Gecko nicht optimal lesbar... 😞



  • danke sehr nett!!!!
    gibt es da auch eine printf() VERSION?
    also mit der #include<stdio.h>



  • Das Problem mit den C-strings (also char[]) ist, dass man eben irgendwo den Speicher bereitstellen/reservieren muss, wo die Eingabe rein kommt.
    Dazu gibt's Prinzipiell mehrere Möglichkeiten:
    Entweder die Funktion macht das intern und der Aufrufer muss sich nachher aber um die Freigabe kümmern (unschöne Verteilung der Verantwortung).
    Oder alles ist in der Verantwortung des Aufrufers, und dieser gibt beim Aufruf der Funktion breits einen Zeiger mit, wohin die Eingabe geschrieben werden soll.
    Dann sollte aber auch die maximale Länge mitübergeben werden, so dass nicht über Bereichsgrenzen geschrieben wird.



  • Na klar

    #include <cstdio> 
    #include <string> 
    
    std::string eingabe(); 
    
    int main() 
    { 
        const std::string wort = eingabe(); 
        std::printf ("%s\n", wort.c_str());
        return 0; 
    } 
    
    std::string eingabe() 
    { 
        return "meinwort"; 
    }
    


  • Warum nimmst du freiwillig printf, wenn es doch cout gibt? 😕



  • Vor allem seit es boost::formated gibt.


Anmelden zum Antworten