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


von Rudi (Gast)


Lesenswert?

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

von Uwe .. (uwegw)


Lesenswert?

Du gibst einen Pointer auf dem String zurück.

von Rudi (Gast)


Lesenswert?

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

string=stringfunktion(xxx);

von Karl H. (kbuchegg)


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
}

von Rudi (Gast)


Lesenswert?

ok danke erstmal aber was bitte ist ein String-Literal?

von Karl H. (kbuchegg)


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)

von hannes (Gast)


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/

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
Noch kein Account? Hier anmelden.