char* als Rückgabewert einer Funktion
-
Der im C Buch liest. schrieb:
Hab in ein C-Buch reingeguckt, die Zeiger müssen als static angelegt
werden. Ansonsten ist der Rückgabewert undefiniert.Ne ne ne, lies das was pale dog gesagt hat. Entweder erzählt dein C-Buch Blödsinn oder du hast die Situation verwechselt.
int *FALSCH0() { int i = 10; // i liegt auf dem Stack return &i; // Fehler: Zeiger auf eine lokale Variable zurück gegeben } // i existiert nicht mehr, der Zeiger ist ungültig char *kein_problem() { char *foo = "ba"; return foo; } // foo existiert zwar nicht mehr, aber das worauf es gezeigt hat char **FALSCH1() { char *foo ="bar"; char **bar = &foo; // Zeiger auf foo, was auf dem Stack liegt return bar; } // bar, foo existieren nicht mehr. Zeiger ist ungültig
-
krass
-
Dersichim C Buch verliest schrieb:
krass
nochmal zusammengefasst: eine funktion darf nicht die adresse eines ihrer lokalen objekte zurückliefern. das geht schief. andere adressen (heap, static, BSS, irgendwas berechnetes, etc.) aber schon.
-
-
Danke an alle.
Also mit der Version
main(){ char* nix; nix=foo(char **nix); } char* foo(char **nix){ char* tmp=nix; tmp="String"; return tmp; }
in etwa (habs nicht mehr genau im Kopf)gehts.......
Danke an alle !
-
Völlug falsch,
1. es sollte nix=foo(char &nix); heißen
2. foo macht irgendwie keinen Sinn, da kannst du gleich
char *foo(char **nix) { return "String"; }
schreiben.
-
supertux schrieb:
char *foo(char **nix) { return "String"; }
Das gleiche in Grün:
char *foo( void ) { return "String"; }
-
Warum nicht gleich char* nix = "string"; ? ^^
-
Eben.
-
einfachheit ftw schrieb:
Warum nicht gleich char* nix = "string"; ? ^^
bei diesem Beispiel schon, ich wollte aber verdeutlichen, dass die Funktion im Beispiel, so wie sie ist, falsch ist, weil ....