Wenn ich die Anzahl der Elemente in einer Variablen namens "totalstrings" und eine Variable namens "string size" habe, die die String-Größe jedes Elements darstellt, wie ordne ich ein Array namens "array?"
Dies ist ein Array von Strings in C, nicht C ++.
Danke!
HINWEIS: In meinen Beispielen wird nicht nach NULL-Returns von malloc () gesucht ... Sie sollten das aber wirklich tun; Sie werden abstürzen, wenn Sie versuchen, einen Nullzeiger zu verwenden.
Zuerst müssen Sie ein Array von Zeichen-Zeigern erstellen, eines für jeden String (char *):
char **array = malloc(totalstrings * sizeof(char *));
Als nächstes müssen Sie Platz für jeden String reservieren:
%Vor% Wenn Sie mit der Verwendung des Arrays fertig sind, müssen Sie daran denken, free()
für jeden der zugewiesenen Zeiger anzugeben. Das heißt, durchlaufen Sie das Array, indem Sie free()
für jedes seiner Elemente aufrufen, und schließlich auch free(array)
.
Das allgemeine Idiom für die Zuweisung eines N by M-Arrays eines beliebigen Typs T ist
%Vor% Nach dem Standard von 1989 müssen Sie das Ergebnis von malloc
nicht mehr darstellen, und tatsächlich wird dies als schlechte Praxis angesehen (es kann eine nützliche Diagnose unterdrücken, wenn Sie vergessen haben, stdlib.h einzuschließen oder nicht) Ich habe keinen Prototyp für malloc
im Umfang. Frühere Versionen von C hatten malloc
return char *
, also war die Besetzung notwendig, aber die Wahrscheinlichkeit, dass Sie mit einem Compiler vor 1989 arbeiten müssen, ist zu diesem Zeitpunkt ziemlich weit entfernt. C ++ macht die Umwandlung erforderlich, aber wenn Sie C ++ schreiben, sollten Sie den Operator new
verwenden.
Zweitens beachte ich, dass ich den Operator sizeof
auf das zuzuweisende Objekt anwende; Der Typ des Ausdrucks *a
ist T *
und der Typ von *a[i]
ist T
(in Ihrem Fall T
== char
). Auf diese Weise müssen Sie sich nicht darum kümmern, den Ausdruck sizeof
mit dem Typ des zugewiesenen Objekts synchron zu halten. IOW, wenn Sie sich entscheiden, wchar
anstelle von char
zu verwenden, müssen Sie diese Änderung nur an einer Stelle vornehmen.
Nun, zuerst möchten Sie vielleicht Platz für "array" zuweisen, was ein Array von char * wäre, das "totalstrings" lang ist.
Was wären dann die Start- und Endindizes in "array"? Du weißt, der erste ist 0; Was ist der letzte?
Dann könntest du für jeden Eintrag in "array" einen Speicherbereich, der "stringsize + 1" ist (warum +1, bitte sag mir?), einen langen Bereich zuweisen, indem du die Startadresse dafür wählst Bereich - diese Zeichenfolge - in das richtige Mitglied von "Array".
Das wäre ein guter Anfang, imo.
Tags und Links c