Call by Reference bei Strings



  • Hallo!

    ich programmiere jetzt seit ein paar Wochen sporadisch in C . Die Dinge die ich noch nicht wirklich verstanden beherrsche ist Verarbeitung von Strings und mit Pointern hab ich auch noch so von Zeit zu Zeit meine Probleme.

    Mein Problem hat offensichtlich mit den beiden Dingen zu tun ­čśë

    Ich soll als Aufgabe eine Shell mit grundlegeneden Eigenschaften implementieren. Daf├╝r m├╝ssen offensichtlich Nutzereingaben abgefragt werden. In der main bekomme ich das problemlos hin, ich w├╝rde jetzt jedoch gerne die Abfrage der Eingabe in eine eigene Funktion auslagern. Dazu m├Âchte ich den String-Parameter input als Referenz ├╝bergeben und in der Funktion die Eingabe in input kopieren. Allerdings mach ich irgendwas falsch, da ich einen Segmentation fault erhalte. Ich habe das Problem mal auf ein Minimum heruntergebrochen:

    #include <stdio.h>
    #include <string.h>
    
    int main() {
    	char str[100];
    	bla(&str);
    	printf("%s\n",str);
    	return 0;
    }
    
    int bla(char **str) {
    	char str2[] = "abc";
    	strcpy(*str,str2);
    	return 0;
    }
    

    Was mache ich hier falsch?

    Danke schonmal f├╝r alle Antworten!



  • ITookYourName schrieb:

    Was mache ich hier falsch?

    Ein Array ist kein Pointer. Ein Array kann aber in einen Pointer zerfallen:

    void bla(char *dst)
    {
      strcpy(dst, "Hallo, Welt!");
    }
    
    int main(void)
    {
      char str[100];
      bla(str);
    }
    

    Du solltest aber die Gr├Â├če des Arrays bei solchen Funktionen m├Âglichst immer mit ├╝bergeben.



  • Es ist ausserdem str == &str .



  • Hey, danke f├╝r die schnellen Antworten. Ich wusste, dass es ein bl├Âder Fehler ist. Ich hatte mir selbst schonmal was zum Unterschied array/pointer durchgelesen, wohl nur schon wieder vergessen ­čÖä

    [quote="cooky451"]

    ITookYourName schrieb:

    Du solltest aber die Gr├Â├če des Arrays bei solchen Funktionen m├Âglichst immer mit ├╝bergeben.

    Hat das nur Sicherheitsgr├╝nde, oder noch andere?



  • ITookYourName schrieb:

    Hat das nur Sicherheitsgr├╝nde, oder noch andere?

    Buffer Overflow



  • refre schrieb:

    Es ist ausserdem str == &str .

    Standardinkonforme Verk├╝rzung und somit Schwachfug.


Log in to reply