在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;
}
语言是一个包含"en-GB", "da-DK"等语言的char *
,streq()
只是一个自制(比strcmp()
稍快)的字符串比较函数。
长话短说,根据编译器的不同,这种方法可能有效,报告编译器警告或编译,但会给出意外的结果。
解决这个问题的正确方法是什么?
const char * strs[] = { "aa", "bb", NULL };
- Kerrek SB