Hallo, ich bin Anfänger im Bereich Mikrocontroler und C Programmierung. Ich arbeite mit AVR Studio und möchte in C eine Funktion schreiben die ein Array zurück liefert: char foo[10]; foo = myFunction(); char[] myFunction() { char bar[10]; for (int i = 0; i < 10; i++) { bar[i] = i; } } error: incompatible types in assignment Gruß Peter
zb arr[i] ist gleichbedeutent mit *(arr + i) somit
Ja, schon... hast Du ein kleines Beispiel? Danke.
Das ist gleich mehrfach falsch, alleine weil in der Funktion nichts zurueckgegeben wird. Du musst einen Zeiger zurueckgeben und nicht den Fehler machen, diesen auf lokale Variablen zeigen zu lassen. Michael
Sorry, verstehe ich immer noch nicht. Kannst Du es evtl. auf das Beispiel oben anwenden?
Moe s wrote:
> static und Zeiger ist das Zauberwort
Man kann auch Klimmzüge machen, wie ein Blöder.
Ein 'Array' in C zurückgeben ist in 99% der Fälle Blödsinn, liegt in der
Natur der Zeiger. Zurückgeben macht effektiv nur dann Sinn, wenn die
Funktion das Dingen auch in einem mit malloc() herleitet.
Sonst ist meistens immer ein Parameter die richtige Wahl, in den der
Aufrufer einen Vektor legt.
Peter wrote: > Sorry, verstehe ich immer noch nicht. Kannst Du es evtl. auf das > Beispiel oben anwenden? Was hilft Dir das dann? Du musst das schon auch verstanden haben. Ich wuerde Dir vorschlagen, erst mal C zu lernen, auf einem PC. Denn wenn Du solche Fehler machst erleichtert Dir der AVR das debugging nicht wirklich.
@ Sven und dein geschwafel hat er jetzt mit sicherheit verstanden. und was das mit malloc zu tun hat ist mir auch nicht klar.
@Michael Das Beispiel ist recht klein und zu lernen doch nicht schlecht geeignet. Dachte ich.
Aber deines, gell? Mit malloc() hat das zu tun, dass das der einzige Weg ist, ein echtes Datenfeld beliebiger Größe dynamisch zurückzugeben. Das geht anders nicht.
1 | void meine_funktion(char *a) { |
2 | for (int i = 0; i < 10; i++) { |
3 | a[i] = i; |
4 | }
|
5 | }
|
6 | |
7 | |
8 | char mein_array[10]; |
9 | meine_funktion(mein_array); |
Vielen Dank. Ich glaube ich verstehe es sogar :-)))
Hallo, zur Anregung der Diskussion hier ein Beispiel aus einer Compiler-Hilfe:
1 | char * strncpy ( char * destination, const char * source, size_t num ); |
Copy characters from string Copies the first num characters of source to destination. Parameters destination Pointer to the destination array where the content is to be copied. source C string to be copied. num Maximum number of characters to be copied from source. Return Value destination is returned. Da hat man alles in einem Paket: array-Parameter veränderlich u. const, variable array-Länge, und sinnvoller array-Rückgabewert. tschü Dude
Peter wrote:
> Vielen Dank. Ich glaube ich verstehe es sogar :-)))
Das ist aber jetzt was ganz anderes, als Du urspruenglich wolltest, das
modifiziert Dir naemlich das uebrgebene Array (call by reference).
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.