Array als Rückgabewert einer Funktion

#808933
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.
1
char* foo()
2
{
3
  return "Hallo world";
4
}

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.
1
void foo( char* pTarget, int size )
2
{
3
  if( size > 11 )
4
    strcpy( pTarget, "Hello World" );
5
}

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

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
1
char* foo()
2
{
3
  char* pPtr = malloc( 12 * sizeof( char ) );
4
  strcpy( pPtr, "Hello World" );
5

6
  return pPtr;
7
}

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