mikrocontroller.net

Forum: Compiler & IDEs Array als Rückgabewert einer Funktion


Autor: Rudi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
ich möchte aus einer Funktion einen String zurückgeben...wie mach ich 
das am besten?

Autor: Uwe ... (uwegw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du gibst einen Pointer auf dem String zurück.

Autor: Rudi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sorry ich habe leider noch nicht so viel Plan also ich möchte 
errreichen, dass ich schreiben kann:

string=stringfunktion(xxx);

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rudi wrote:
> Hi,
> ich möchte aus einer Funktion einen String zurückgeben...wie mach ich
> das am besten?

Kommt auf den String an.
Ist es ein String-Literal, dann kann man einfach einen Pointer
darauf zurückgeben.
char* foo()
{
  return "Hallo world";
}

Ist es keines, dann ist die beste Option (leider) die, dass
der Aufrufer einen Pointer auf ein Array übergibt, welches
gross genug ist, dass der String dort auch hineinpassen wird.
Am besten übergibt der Aufrufer auch noch die Größe dieses
Arrays, damit die Funktion sich vor Array Überläufen schützen
kann.
void foo( char* pTarget, int size )
{
  if( size > 11 )
    strcpy( pTarget, "Hello World" );
}

oder
void foo( char* pTarget, int size )
{
  strncpy( pTarget, "Hello World", size );
}

Ist dies nicht möglich, weil zb. die Stringgröße im Vorfeld
nicht abgeschätzt werden kann, dann kann die Funktion den
Speicher auch dynamisch anlegen und einen Pointer zurückliefern.
Das hat aber den Nachteil, dass der Aufrufer nicht vergessen
darf, den Speicher auch wieder frei zu geben
char* foo()
{
  char* pPtr = malloc( 12 * sizeof( char ) );
  strcpy( pPtr, "Hello World" );

  return pPtr;
}

Autor: Rudi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok danke erstmal aber was bitte ist ein String-Literal?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rudi wrote:
> ok danke erstmal aber was bitte ist ein String-Literal?


Ein konstanter Text.

(Dabei hab ich extra noch Beispiele hingemacht, damit man die
Unterschiede in den einzelnen Varianten sieht)

Autor: hannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also mir hat lesen anfangs viel gebracht :)
Schau dir mal dieses Buch an. Das erklärt schon mla einiges.
http://www.galileocomputing.de/openbook/c_von_a_bis_z/

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.