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

Gast #1135488
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
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
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
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

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.