char* dynamisch erweitern, wo liegt der Fehler?
-
Hallo!
Ich will ein char* dynamisch erweitern. Aber wo liegt der Fehler?
char *CString; CString = ""; for (char c=50;c<60;++c) { CString = (char*)realloc(CString, strlen(CString)+1); CString[c-50] = c; }
-
CString = "";
??? CString ist nur ein Zeiger Meinst du
CString = NULL;
CString = (char*)realloc(CString, strlen(CString)+1);
1. strlen gibt die Anzahl der Zeichen zurück nicht die Größe des allokierten Speichers
2. wenn du strlen verwendest muss die zeichenkette terminiert sein
3. Eine Zeichenkette für die strlen() x zurück gibt belegt also schon x+1 Bytes Speicher du kanst die Zeichenkette mit diesem Befehl also nie vergrößern
-
Wie würde es richtig heißen?
-
Hallo!
Ich habe mich noch mal mit der Sache beschäftigt und bin zu folgendem Quellcode gekommen:
char *CString; CString = '\0'; for (char c=65;c<75;++c) { CString = (char*)realloc(CString, sizeof(CString)+1); CString[c-65] = c; } printf("%i",strlen(CString)); printf(CString);
In CString ist dann richtig die Zeichenkette "ABCDEFGHIJ" enthalten. Aber leider hängt der am Ende immer noch so ein merwürdiges Sonderzeichen (immer das selbe) dran. Gibt es eine elegantere und richtige Variante?
-
Tag,
Ja es gibt eine bessere. Du machst es nicht dynamisch! Das brauchst du in diesem Fall nicht, also warum der Umweg ?
char boeserstatischerstring[11]; int i; for(i=0;i<10;i++) boeserstatischerstring[i]=(i+65); printf("%d\n",strlen(boeserstatischerstring)); printf(boeserstatischerstring);
-
Ich habe mein Beispiel stark vereinfacht. In meinem Programm ist da eine while Schleife mit unbekannten Anzahl von Durchläufen. Die while Schleife ist auch nur eine Unterschleife einer anderen while Schleife. Ich muss also leider den cstring dynamisch verändern.
-
Tag,
Immer zeichenweise ? Oder kannst du auch mal größere Stücke allozieren ?
-
Immer Zeichenweise.