Rückgabe von Strings aus der Funktion
-
Nein, void* werden schon seit vieeeelen Jahren implizit in den jeweiligen Zieltyp umgewandelt.
-
TactX schrieb:
@ neko: Der cast bei malloc() ist vollkommen überflüssig. Und sizeof(char) ist immer 1. Und die Reihenfolge der Parameter bei strncpy stimmt auch nicht.
Sorry, weiß nicht genau wie das bei ANSI C ist, ich habe direkt mit C++ angefangen zu coden
-
Ich sollte den Puffer innerhalt der Funktion erstellen und den Inhalt zurückgeben.
DAs ist das Problem...
MOndmann
-
Dann benutz halt malloc() _in_ der Funktion.
-
dann würde es so aussehen mit malloc():
//declaration char* FKT_gibstring(void); //definition char* FKT_gibstring(void) { char* text=(char*)malloc(255); strcpy(text,"Das ist der String den ich nachher haben will, wird dynamisch in dieser Funktion erstellt!"); [b]free(text);[/b] return text; } //Haupfunktion ...main (usw) { //irgendwelche Operationen char gibtext[255]; strcpy(gibtext,FKT_gibstring()); printf("%s",gibtext); //weitere Operationen mit gibtext. ...usw }
das geht so aber nicht, weil ich den Speicher ja innerhalb der Funktion wieder freigeben muss.
Somit ist der Speicher zerstört und ich kann nichts mehr zurückgeben.
Es muss doch eine richtige Lösung geben, wie macht Ihr denn das immer?Mondmann
-
Ähm, folgende Idee: Den Speicher vor dem Zurückgeben einfach mal nicht free'n sondern erst dann wenn Du ihn nicht mehr brauchst?!?
-
Wer sagt daß du den Speicher in der Funktion wieder freigeben musst? Den kannst du freigeben wo und wann du willst. Ich würde an deiner Stelle aber dem Vorschlag von Neku folgen.
-
free woanders aufrufen?
Warum nimmst du nicht einfach "static". Ist zwar nicht wirklich klasse gelöst aber auf jeden Fall besser als malloc in der Funktion aufzurufen und free irgendwo "Am Arsch der Welt".
Ausserdem castet man den Rückgabewert von malloc nicht.
-
feigling schrieb:
Warum nimmst du nicht einfach "static". Ist zwar nicht wirklich klasse gelöst aber auf jeden Fall besser als malloc in der Funktion aufzurufen und free irgendwo "Am ***** der Welt".
Was ist wenn er die Funktion mehrmals aurfufen will und alle Ergebnisse behalten will? Nene, malloc() ist da schon besser.
-
Hat er aber nirgendwo erwähnt, dass er das machen will
Kommt halt drauf an, für was die Funktion gut sein soll. Ruft man die Funktion ein paar Mal auf und der alte Wert ist egal, würde ich ganz klar static nehmen, sonst natürlich malloc.