Pointer to string array in C

Игра с указателями в C - это весело (не совсем).

У меня есть несколько массивов строк, которые я хочу объявить простым способом, желательно что-то вроде:

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

Что-то похожее на массив переводов (но не совсем), поэтому я хочу иметь возможность переключаться между ними во время выполнения. Для этого мне нужен указатель pointerToArrayOfStrings, который я могу менять местами, например:

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

В моем наивном понимании массивов строк и указателей на них, вот что я пробовал:

// 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;
}

Language is a char * containing the language "en-GB", "da-DK" etc.., streq() - это просто домашняя (несколько быстрее, чем strcmp()) функция сравнения строк.

Короче говоря, в зависимости от компилятора этот подход может работать, выдавать предупреждения компилятора или компилироваться, но давать неожиданные результаты.

Каким будет правильный способ решения этой проблемы?

11
задан Sangeeth Saravanaraj 12 January 2012 в 19:25
поделиться