String aus funktion zurückgeben



  • roflrudi schrieb:

    11 [Warning] return makes integer from pointer without a cast
    11 [Warning] function returns address of local variable

    [...]

    Ich verstehe nicht was gemeint ist mit den Fehlermeldungen oder wie ich sie beheben kann.

    Beide beziehen sich auf Zeile 11: return s2;

    s2 ist bei dir ein funktionslokales Array, das nach Ende der Funktion garnichtmehr existiert. Es macht daher keinen Sinn, es (bzw. da ein Array in einen Pointer zerfällt: einen Pointer darauf) zurückzugeben, da der Aufrufer deiner Funktion inverter() damit sowieso nichts anfangen kann (und darf!).
    Weiters gibt deine Funktion inverter() etwas vom Typ char zurück, ein Typ für ein Zeichen. Dein Compiler sieht aber beim return , daß du einen Pointer to char (in das zerfällt dein Array) zurückgibst, muss den zwangsweise aber in den Rückgabetyp char stopfen, und warnt dich davor (return makes integer from pointer without a cast), weil du das mit ziemlicher Sicherheit nicht willst.

    // edit: meingott, bin ich laangsam 😮



  • ok den ersten Fehler verstehe ich und weis auch wie ich ihn beheben kann.
    Aber ich verstehe nicht wie ich den zweiten beheben soll 😕



  • Drei Möglichkeiten:

    • s1 direkt in sich selbst umdrehen
    • inverter() als weiteren Parameter einen Zeiger auf den Bereich zum schreiben geben
    • in inverter() Speicher für s2 dynamisch anfordern


  • ups jetzt hast mich falsch verstanden 🙂
    ich meinte den anderen fehler den ich nicht verstehe 🙂
    also:
    11 [Warning] return makes integer from pointer without a cast

    das mit der lokalen variable verstehe ich 🙂



  • Du machst sinngemäß

    char foo( void )
    {
        char * ptr = 42;
        return ptr;
    }
    

    In Zeile vier muss also ein char* in einen char umgewandelt werden. Davor wirst du gewarnt.



  • Und den Terminator '\0' hast du auch vergessen.
    Sowohl den Platz dafür, als auch ihn zu schreiben.



  • Mit return s2 gibst du in wirklichkeit einen Zeiger auf das erste Element des Arrays zurück.Der Compiler meckert,weil du bei deiner Funktion den Rückgabewert char und nicht char * angegeben hast.

    Mal eine andere Frage an alle hier,wieso kann der Thread Ersteller die größe des Arrays mithilfe einer Funktion ermitteln

    laenge = strlen(s1);
        char s2[laenge];
    

    Muss bei einem Array nicht ein konstanter Wert/Ausdruck zur Angabe der Größe verwendet werden?



  • Das sind VLA, deren Größe erst zu Laufzeit feststeht. Außerdem ist die Länge hier um 1 zu klein.



  • Das nennt sich Variable Length Array (kurz VLA) und ist seit C99 im Standard.

    Mit C11 wurde es aber teilweise zurückgenommen. Es ist kein Muss mehr.



  • Ich danke euch.
    👍


Anmelden zum Antworten