Ich brauche eine Art "ArrayList", in der ich eine unbestimmte Anzahl von Strings speichern kann. Ich hab mir dazu eine Lösung überlegt, die auch funktioniert, aber ich weiß nicht ob das vom Konzept her so richtig ist.
Das Konzept (vereinfacht):
Code
**char liste = NULL;
//Einlesen
int numElements = 0;
while (/* lese Eingabedaten */) {
numElements++;
liste = realloc(liste, sizeof(*char)*numElements);
strncopy(*(liste + numElements - 1), /* Eingabe */, MAXLENGTH);
}
//Ausgabe
int i;
for (i = 0; i < numElements; i++) {
fprintf(stdout, "%s", *(liste + numElements));
}
//Speicher löschen
for (i = 0; i < numElements; i++) {
free(*(liste + numElements));
}
free(liste);
Alles anzeigen
Besonders das Speicherfreigeben ist mir auch noch nicht ganz klar. Die Schleife um den Speicher für die einzelnen Strings freizugeben ist meiner Meinung nach nötig, weil sonst nur die Pointer auf die Strings gelöscht werden, stimmt das? Und gibt realloc() den alten Speicherbereich (wenn verschoben) selbst wieder frei oder muss ich das machen?