String per Pointer aus einer Funtion übergeben. Oder geht es anders?



  • Hallo, bin neu hier.
    Hab die Suche schon zig mal benutzt, bin jetzt doch aber mal hängen geblieben. Es geht darum ein String das in der Funktion per getchar() eingelesen wird, wieder per Pointer zurückzugeben werden soll.
    Ich darf leider keine Funktionen aus der string.h benutzen.

    Das einlesen klappt ja, jedoch bei der Übergabe des Strings kommt nur mist raus. Ich wär für eure Hilfe sehr dankbar.

    Gruss Raphael

    #include<stdio.h>
    int einlesen(char *wort) 
    { 
        int x=0, i=0, c; 
        char s2[20];
    
       /* ARRAY LEEREN */
            for(x=0;x<=20;x++){
            s2[x]='\0';
            }
       /* WORT EINLESEN */
        while ((c = getchar()) != EOF && c != '\n' && i < 20-1) { 
            s2[i++] = c; 
        } 
        printf("\nTEST DAS WORT: %s ", s2); /* Hier gibt er es noch richtig aus*/
        *wort = s2;
     }
    int main() {
    int laenge=20;
    char wort1[laenge];
    
        printf("\nAls erstes geben Sie bitte zwei Worte ein.\n");
        printf("\nWort 1: ");
        einlesen(&wort1);
        printf("\nSie haben %s eingegeben", wort1); /* hier kommt nur noch kuddelmuddelraus */
    
    return 0;
    }
    


  • Morgen,

    hab Fehler gefunden, hab vergessen das ein Array selbst ein Pointer auf das erste Zeichen ist. Und somit ich mit das & bei

    einlesen(&wort1);
    

    sparen kann. ggrr Das ich nicht früher drauf gekommen bin.



  • Raphael6N schrieb:

    Morgen,

    hab Fehler gefunden, hab vergessen das ein Array selbst ein Pointer auf das erste Zeichen ist. Und somit ich mit das & bei

    einlesen(&wort1);
    

    sparen kann. ggrr Das ich nicht früher drauf gekommen bin.

    Das war doch aber nicht der Fehler. Der Fehler ist, dass die Zuweisung *wort = s2; nicht so funktioniert wie du dir das vorgestellt hast.



  • der Komplette funktionierende code

    void einlesen(char *wort) { 
        int x=0, i=0, c; 
       /* ARRAY LEEREN 
            for(x=0;x<=20;x++){
            wort[x]='\0';
            }*/
       /* WORT EINLESEN */
        while ((c = getchar()) != EOF && c != '\n') { 
            if(i<20){
                    wort[i] = c;
            }
            i++;
        }
         wort[i] = 0;
    }
    


  • Genau. Die Zuweisung *wort = s2; ist nicht mehr drin. Die funktioniert nämlich nicht.


Log in to reply