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.


Anmelden zum Antworten