Das Spielen mit Zeigern in C
macht Spaß (nicht wirklich).
Ich habe mehrere Arrays von Strings, die ich einfach deklarieren möchte, vorzugsweise so etwas wie:
%Vor% Ähnlich wie ein Übersetzungs-Array (aber nicht ganz), also möchte ich während der Laufzeit zwischen diesen wechseln können. Dafür möchte ich einen Zeiger pointerToArrayOfStrings
, den ich tauschen kann wie:
In meinem naiven Verständnis von Arrays von Strings und Zeigern habe ich Folgendes versucht:
%Vor% Sprache ist ein char *
mit der Sprache "en-GB", "da-DK" usw., streq()
ist nur eine selbst erzeugte (etwas schneller als strcmp()
) Zeichenkettenvergleichsfunktion.
Lange Rede, kurzer Sinn, je nach Compiler kann dieser Ansatz funktionieren, Compiler-Warnungen melden oder kompilieren, aber unerwartete Ergebnisse liefern.
Was wäre der richtige Weg, um dieses Problem zu lösen?
Es gibt zwei Möglichkeiten, mit einem Array von Zeichen (Strings) in C
zu arbeiten. Sie sind wie folgt:
Bildliche Darstellung ist als Inline-Kommentar im Code verfügbar.
Je nachdem, wie Sie das Array von Zeichen (Strings) darstellen möchten, können Sie den Zeiger wie folgt definieren:
%Vor%Sie sind grundsätzlich verschiedene Arten (auf eine subtile Weise) und so sind die Zeiger auf sie auch etwas anders.
Das folgende Beispiel zeigt die verschiedenen Möglichkeiten, mit Zeichenfolgen in C
zu arbeiten, und ich hoffe, es hilft Ihnen, ein Array von Zeichen (Strings) in C
besser zu verstehen.
Was wäre der richtige Weg, um dieses Problem zu lösen?
Nun, der richtige Weg wäre, eine Bibliothek zu verwenden, die speziell für den Umgang mit mehrsprachigen Oberflächen entwickelt wurde - zum Beispiel gettext .
Eine andere Möglichkeit, wenn auch lückenhafter, wäre die Verwendung einer Hash-Tabelle (auch bekannt als "Wörterbuch" oder "Hash") Karte "oder" assoziative Karte "in anderen Sprachen / Technologien): Auf der Suche nach einer guten Hash-Tabellenimplementierung in C
Es ist wahrscheinlich nicht die Antwort, nach der Sie gesucht haben, aber Sie haben die falsche Frage nach dem richtigen Problem gestellt.