Wie schreibt ma eine Funktion die ein Array zurück gibt?

Gast #1135488
Lesenswert?
• ▲
▼
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
Gast #1135517
Lesenswert?
• ▲
▼
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.
Gast #1135539
Lesenswert?
• ▲
▼
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);
Gast #1135572
Lesenswert?
• ▲
▼
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren