Hi, ich möchte aus einer Funktion einen String zurückgeben...wie mach ich das am besten?
sorry ich habe leider noch nicht so viel Plan also ich möchte errreichen, dass ich schreiben kann: string=stringfunktion(xxx);
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 | }
|
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)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.