Zeiger auf string-array in C

Spielen mit Zeigern in C ist Spaß (nicht wirklich).

Ich habe mehrere arrays von strings ich möchte erklären auf einfache Weise, am besten etwas wie:

arrayOfStrings1 = {"word1", "word2", etc. };
arrayOfStrings2 = {"anotherword1", "anotherword2", etc. };
arrayOfStrings3 = etc.
etc.

Etwas ähnliches wie eine übersetzung array (aber nicht ganz), also ich will in der Lage, wechseln zwischen diesen während der Laufzeit. Dafür will ich einen Zeiger pointerToArrayOfStrings dass ich tauschen kann wie:

pointerToArrayOfStrings = arrayOfStrings1;
doStuff();
pointerToArrayOfStrings = arrayOfStrings2;
doSomeOtherStuff();

In meiner naiven Verständnis von arrays von strings und Pointer auf diese, das ist, was ich versucht habe:

//Danish transforms
const unsigned char* da_DK[] = {"b","bb","c","c","cc","d","dd","e","f","ff","g","gg","h","hh","j","j","jj","k","k","kk","l","l","l","l","ll","m","mm","n","n","nn","p","pp","r","r","r","rr","s","s","s","ss","t","t","tt","v","v","vv","æ"};

//British english transforms
const unsigned char* en_GB[] = {"a","a","a","a","a","a","a","a","a","a","a","a","a","age","ai","aj","ay","b","cial","cian","cian","dj","dsj","ea","ee","ege","ei","ei","eigh","eigh","f","f","f","g","g","gs","i","i","i","j","j","k","ks","kw","l","m","n","n","o","r","s","s","sd","sdr","sion","sion","sj","sj","tial","tion","tion","tj","u","u","u","u","w","ye","ye","z"};

    //More languages....

const unsigned char** laguageStrings;

//Assign language
if (streq(language, "da-DK")){
    laguageStrings= da_DK;
}
else if (streq(language, "en-GB")){
    laguageStrings= en_GB;
}
else
         return 0;
}

Sprache ist ein char * mit der Sprache "en-GB", "da-DK" etc., streq() ist nur eine Heimat gebraut (etwas schneller als strcmp()) string-Vergleich-Funktion.

Lange Geschichte kurz, je nach compiler kann diese Annäherung arbeiten, berichten, dass der compiler Warnungen oder kompilieren, aber unerwarteten Ergebnissen führen.

Was der korrekte Weg wäre, dieses problem zu lösen?

  • Was ist das problem?
  • Sie sollten am Ende Ihrer string-arrays mit einem NULL-Zeiger, so dass Sie durchsuchen können Sie sinnvoll: const char * strs[] = { "aa", "bb", NULL };
  • Je nach compiler funktioniert es nicht. Linux GNU-compiler mag es und funktioniert XCODE nicht und macht einige komische Fehler.
  • irgendein besonderer Grund für die Verwendung unsigned char nicht char?
  • Jetzt bin ich die Vermeidung von multibyte/wide-Zeichen-Unterstützung als es ist geschrieben in plain C, aber ich möchte so viele chars von ISO-8859-1 wie möglich, daher unsigned chars.
  • Ich habe aktualisiert die text, damit es klarer, was meine Frage ist. Ich hoffe, Sie verstehen jetzt.
  • haben Sie sich überlegt Beachtung der compiler-Warnungen als relevant? Es ist noch nicht klar, ob dein problem mit dem custom streq Funktion oder mit deinem char-Zeigern. Wieder, die compiler-Warnungen, und alle runtime Fehler oder debugger-Ausgabe wäre hilfreich, um zu ermitteln, dass.
  • Ich werde vorschlagen, Sie Bearbeiten Ihre Frage zu geben, die kürzeste geschlossene (d.h. komplette, das ist kompilierbare) Beispiel für das problem, das Sie erleben. Eine minimale triviales Beispiel. Und gehören die compiler-Warnungen und/oder Laufzeit-Fehler (oder debugger-Ausgabe des Fehlers).
  • Die Frage ist-vollständig und vage. Ich habe versucht mein bestes, Sie zu beantworten. +1 für deine Frage, wie es verlangt klares Verständnis von dem array von Zeichen (Zeichenfolgen), Ihre Frage zu beantworten.
  • Ich habe bewusst nicht von compiler-Warnungen/Fehler, weil ich meinte, diese Frage als eine theoretische Frage über die ordnungsgemäße Durchführung der Zeiger auf arrays von strings - @SangeethSaravanaraj hast es genau richtig. Entschuldigungen wenn das war nicht klar.

InformationsquelleAutor Woodgnome | 2012-01-11
Schreibe einen Kommentar