funktionen und char *



  • warum funzt das nicht:

    void foo (char * str)
    {
        free (str);
        str = strdup ("Hallo");
        return;
    }
    
    int main ()
    {
        char * buffer = (char *) malloc (100);
        strcpy (buffer, "Hi");
        printf ("%s\n", buffer);
        foo (buffer);
        printf ("%s\n", buffer);
        free (buffer);
        system("PAUSE");
        return 0;
    }
    

    Der Zweite String wird einfach nicht korrekt wiedergegeben.
    Hat jemand Rat?



  • Das muss so aussehen:

    void foo (char **str) 
    { 
        free (*str); 
        *str = strdup ("Hallo"); 
        return; 
    }
    
    int main ()
    {
        char * buffer = (char *) malloc (100);
        strcpy (buffer, "Hi");
        printf ("%s\n", buffer);
        foo (&buffer);
        printf ("%s\n", buffer);
        free (buffer);
        system("PAUSE");
        return 0;
    }
    

    weil du in foo die Speicheradresse änderst, also auch die Speicheradresse übergeben musst.



  • Der Zeiger "str" in der Funktion foo ist eine Kopie des anderen Zeigers "str" (call by value). Wenn du ihn in der Funktion änderst, hat das auf das ursprüngliche "str" überhaupt keine Auswirkung.



  • thx


Anmelden zum Antworten