Das wäre:
1 | int main(void)
|
2 | {
|
3 | char *buf;
|
4 | buf = sub();
|
5 | }
|
6 |
|
7 | char *sub()
|
8 | {
|
9 | char buffer[30]
|
10 | strcpy (buffer, "irgend ein Text");
|
11 | return buffer;
|
12 | }
|
funktioniert aber nicht, oder nur zeitweise scheinbar...
weil der Speicher von "buffer" lokal von "sub" ist un damit auf dem
Stack liegt, d.h. nach dem verlassen von "sub" wieder beim Aufruf der
nächsten Funktion überschrieben wird.
Also entweder:
1 | int main(void)
|
2 | {
|
3 | char *buf;
|
4 | buf = sub();
|
5 | }
|
6 |
|
7 | char *sub()
|
8 | {
|
9 | static char buffer[30];
|
10 | strcpy (buffer, "irgend ein Text");
|
11 | return buffer;
|
12 | }
|
damit der Speiceher statisch angelegt wird (damit ist so eine Funktion
dann bestimmt nicht re-entrant, das ist aber meist egal, wenn man keine
Rekursionen oder Multitasking hat - auf dem AVR eher selten..), oder den
Speicher allozieren (mit malloc..., was auf dem AVR auch nicht immer zu
empfehlen ist)...
Gruß,
Bernhard
Edit: mitkopierte Fehler korrigiert