Linux, gcc und einfache Strings

Hi!

Ich habe mir folgende Aufgabe gestellt :smile:
Ich will eine Stringrekursion in C machen. Da habe ich ein altes Beispiel ausgegraben, das sowas hier ausgibt:
„Vor dem Spiegel: Es war einmal ein Mann, der einen Mann sah, der einen Mann sah, der einen Mann sah, der sich rasierte, der sich rasierte, der sich rasierte“

Nur habe ich Probleme, einen geeigneten Stringtyp zu finden. Unter Windows in der MFC gibts ja z.B. CString. Dort braucht man sich dann nicht um die Größe zu kümmern. Unter C muss man offensichtlich mit Arrays und Pointern rumhantieren.
Folgenden Code habe ich jetzt geschrieben:

char *text;

char *rekutext(int n){
if (n > 0){
strcat(text,", der einen Mann sah");
rekutext(n-1);
strcat(text,", der sich rasierte");
}
return text;
}

int main (){
char *bla;
text=(char *)realloc(text,100);

strcpy(text,„Vor dem Spiegel: Es war einmal ein Mann“);
text = rekutext(3);
printf(text);
}

Die Informationen über realloc habe ich mir irgendwo zusammengesucht. Es funktioniert soweit auch. Nur halte ich so ein Programmieren für recht ungeschickt. Und die 100 im realloc habe ich einfach nur mal so gewählt. Ist schon klar, dass da die Größe hin muss. Wahrscheinlich ist der Code schon grob fahrlässig, was Sicherheitslücken angeht.
Nur würde ich gerne mit einfachen Mitteln einen Code finden, der mir einen dynamischen String liefert, ohne dass ich mich groß um Speicherreservierung kümmern muss.
Wäre sowas möglich? Und das möglichst in C. :smile:

Vielen Dank!

Grüße,
André

Hallo André,

Nur habe ich Probleme, einen geeigneten Stringtyp zu finden.
Unter Windows in der MFC gibts ja z.B. CString. Dort braucht
man sich dann nicht um die Größe zu kümmern. Unter C muss man
offensichtlich mit Arrays und Pointern rumhantieren.
Folgenden Code habe ich jetzt geschrieben:

char \*text;

**char \*mystrcat(char \*buffer, char \*text)  
{  
 buffer = (char \*) realloc(buffer, strlen(text));  
 if (buffer == NULL)  
 {  
 puts("Kein weiterer Speicher zur verfügung");  
 exit(0);  
 }  
 strcat(buffer, text);  
 return buffer;  
}**  

char \*rekutext(int n)
{
 if (n \> 0)
 {
**my** strcat(text,", der einen Mann sah");
 rekutext(n-1);
**my** strcat(text,", der sich rasierte");
 }
 return text;
}

int main ( **void** )
{
 char \*bla;
 text = **(char \*) malloc(2); //realloc(text,100);**

**my** strcpy(text,"Vor dem Spiegel: Es war einmal ein Mann");
 text = rekutext(3);
 printf(text);
}

Ich habe das ganze zwar nicht getestet, sollte aber so funktionieren.

MfG Peter(TOO)