Funktion mit String-Rückgabewert?
-
Hallo!
Wie kann ich es bewerkstelligen, daß eine Funktion als Rückgabewert eine String (Zeichenkette) haben, die ich zB in printf verwenden kann? Die Funktion soll dann also ca. so verwendet werden können:printf("Soundso %s: ", Funktion(EinInt));
Danke vielmals!
P.S.: Die anderen Forenbeiträge haben mir kaum weitergeholfen...
-
a) du erzeugst den String in der Funktion statisch, was zu Problemen mit Threads führen kann
b) du übergibst den Speicher fuer den String
c) du reservierst Speicher auf dem Heap, wobei du dann das Problem hast, diesen Speicher wieder freizugeben
-
Kannst Du mir vielleicht die Möglichkeit b), die mir am geeignetsten erscheint, etwas erläutern? Ich habe schon probiert, da einen pointer zu übergeben, aber nachdem ich noch sehr wenig Erfahrung mit C habe (bin Delphi-verwöhnt, was Funktionen mit Stringrückgabewert betrifft) , hat das nicht so funktioniert, wie ich mir das vorgestellt habe.
-
hier mal nen Ansatz
#include <stdio.h> //erzeugt aus a und b einen C-String im Array speicher char *foo(char a,char b,char *speicher) { speicher[0]=a; speicher[1]=b; speicher[2]=0; return speicher; } int main() { char str[3]; //Speicher fuer den String printf("%s\n",foo('h','i',str)); }
-
Danke für den Tip! Nur noch eine Frage: Methode c) wäre doch ca. so, oder?
char *IntToBinStr(int Eingabe) { char *AString; AString = (char*)malloc(sizeof(char[8])+1); // Irgendeine Transformation von Eingabe nach AString return AString; }
Wann wird der Speicher, den ich für AString allokiert habe, wieder freigegeben? Wenn ich das Programm terminiere? Wird er überhaupt freigegeben? Kann/muß ich ihn irgendwie manuell wieder freigeben?
-
du musst ihn manuell freigeben (also im Endeffekt gibt ihn idr. dein Betriebssystem am Ende des Programmes frei). Du gibst den Speicher frei, in dem du free aufrufst und als Parameter den Pointer übergibst. Das ist dann wieder ein Problem, da du den Pointer dann speichern müsstest. Ich würde Möglichkeit b nehmen