char aus Funktion zurück geben



  • Hallo Leute,

    wie bekomme ich aus einer Funktion einen bzw. mehrere char-Werte unbekannter/variabler Größe in die main() zurück?
    Klappt irgendwie alles nicht.

    Nochmal am Beispiel (vari soll in fkt() erstellt werden und in main() ausgegeben werden):

    [code]int fkt()
    {
      char vari[MAX_PATH];
    
      //code
      return 0;
    }
    
    int main(void)
    {
      //code
    
     cout<<vari;
     return 0;
    }[/code]
    

    Danke schonmal!



  • std::string fkt()
    {
    return "irgendwas";
    }



  • T@ schrieb:

    Hallo Leute,

    wie bekomme ich aus einer Funktion einen bzw. mehrere char-Werte unbekannter/variabler Größe in die main() zurück?
    Klappt irgendwie alles nicht.

    Nochmal am Beispiel (vari soll in fkt() erstellt werden und in main() ausgegeben werden):

    Du erstellst vari aber in main. Du definierst nämlich das Array da.

    char vari[MAX_PATH];
    

    Wenn Du nur einen Zeiger auf einen (oder mehrere Chars) haben möchtest, so musst Du

    char * vari;
    

    schreiben.

    Wenn fkt Dir ein (char 😉 zurückgeben soll, dann muss der Rückgabetyp stimmen.

    char * fkt( void )
    
    int const MAX_PATH=255;
    
    char * fkt( void )
    {
      char * result;
    
      /* erstelle String */
      result = new char[ MAX_PATH ];
    
      strcpy( result, "Hallo Welt" );
    
      return result;
    }
    
    int main( void )
    {
      char * vari;
    
      vari = fkt();
    
      /* mach was damit */
    
      printf( "vari ist: %s\n", vari );
    
      delete vari;
    
      return 0;
    }
    

    Alternativ läßt Du vari auf dem Stack von main() und übergibst fkt den Hinweis, wo die Daten geschrieben
    werden sollen:

    int const MAX_PATH=255;
    
    void fkt( char * data )
    {
      strcpy( data, "Hallo Welt" );
    }
    
    int main( void )
    {
      char vari[ MAX_PATH ];
    
      fkt( vari );
    
      /* mach was damit */
    
      printf( "vari ist: %s\n", vari );
    
      return 0;
    }
    


  • Danke Leute, es funzt!
    Xin, das zweite war genau das, was ich gesucht hatte!

    Über den Weg

    vari=fkt()
    

    , kann immer nur der eine Wert von return() zurück gegeben werden, oder?



  • T@ schrieb:

    Danke Leute, es funzt!
    Xin, das zweite war genau das, was ich gesucht hatte!

    Über den Weg

    vari=fkt()
    

    , kann immer nur der eine Wert von return() zurück gegeben werden, oder?

    Richtig. Aber der Wert könnte auch zum Beispiel ein

    struct FktResult
    {
      char * Zeiger1;
      int    Wert1;
      int    Wert2;
    };
    

    sein.

    Alternativ kannst Du auch Rückgabeparameter mittels Referenzen machen:

    int const MAX_PATH=255;
    
    void fkt( char * var, int & length )
    {
      strcmp( var, "Hallo Welt" );
      length = strlen( "Hallo Welt" );
    }
    
    int main( void )
    {
      char vari[ MAX_PATH ];
      int varl;
    
      fkt( vari, varl );
    
      printf( "Vari: %s, Länge: %d\n", vari, varl );
    
      return 0;
    }
    

Log in to reply