Wie Char Array an Funktion übergeben ?



  • Hallo

    Angenommen ich habe eine Eingeabefunktion : char eingabe()

    Das Char Array ist wie folgt deklariert : char input [50]

    Dort lese ich eine Zeichenkette ein : scanf("%s",input);

    Z.b : 2,3,4,+,+ ( Soll eine Postfix Auswertung machen ).

    Und dann returne ich es : return input;

    Jetzt möchte ich das eingelesene Char Array in der int main () wieder aufrufen.
    Dazu habe ich : input = eingabe() verwendet.

    Leider funktioniert die Sache so nicht.

    Bekomme dann vom Compiler die Fehlermeldung :

    error: incompatible types when assigning to type ‘char[50]’ from type ‘char’

    Wie funktioniert die Sache ?
    Wenn ich alles in der main Funktion einlese funktioniert das Programm wunderbar, leider funktioniert das übergeben vom Char Array nicht.



  • hallo,

    diese problem habe ich auch im thema "hilfe bei funktion" erklärt, hier nochmal das Beispiel:

    #include <stdio.h> 
    #include <stdlib.h> 
    
    char *name(void)//Funktion hat den Typ * damit kann man Pointer zurückgeben 
    { 
        static char nam[256]; 
        printf("Willkommen bei *** bitte gib deinen Namen ein: "); 
        scanf("%s",nam); 
        return nam;//Da du einen String brauchst, übergibt du eine Adresse zurück 
    } 
    
    int main(void) 
    { 
        char *pPointer=NULL; 
        pPointer=name();//Die Adresse von pPointer zeigt jetzt auf die variable nam 
        printf("%s\n",pPointer);//Achtung!: Die adresse muss geprinted werden. 
        return 0; 
    }
    

    um einen string zu übergeben muss die funktion den typ * haben.
    hoffe das hat geholfen

    lg



  • Schlechtes Beispiel.
    static ist im Hinblick auf Multithreadfähigkeit und Debugging/Wartbarkeit möglichst zu vermeiden. Für solche Trivialfälle sollte der aufrufende Kontext den Speicher bereitstellen:

    char *name(char *s,size_t w)
    {
      return fgets( s,w,stdin );
    }
    
    int main()
    {
      char eingabe[50];
      puts( name(eingabe,sizeof eingabe) );
      return 0;
    }
    

    Hier fehlt natürlich noch die Fehlerbehandlung.



  • Klasse, mit der zweiten Methode hats jetzt funktioniert 😉

    Danke 🙂


Anmelden zum Antworten