Jugar con punteros en C
es divertido (en realidad no).Puntero al conjunto de cadenas en C
Tengo varias matrices de cadenas quiero manifestar de una manera fácil, preferentemente algo como:
arrayOfStrings1 = {"word1", "word2", etc. };
arrayOfStrings2 = {"anotherword1", "anotherword2", etc. };
arrayOfStrings3 = etc.
etc.
Algo parecido a una matriz de traducción (pero no del todo), por lo que quiero ser capaz de cambiar entre estos durante el tiempo de ejecución. Para que quiero un puntero pointerToArrayOfStrings
que puedo cambiar como:
pointerToArrayOfStrings = arrayOfStrings1;
doStuff();
pointerToArrayOfStrings = arrayOfStrings2;
doSomeOtherStuff();
En mi ingenua comprensión de matrices de cadenas y punteros a ellos, esto es lo que he intentado:
// 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;
}
El lenguaje es un char *
que contiene el idioma "en-GB", "da-DK", etc., streq()
es solo una función de comparación de cadenas casera (algo más rápido que strcmp()
).
Para abreviar, dependiendo del compilador, este enfoque puede funcionar, informar las advertencias del compilador o compilar, pero dar resultados inesperados.
¿Cuál sería la forma correcta de resolver este problema?
¿Cuál es el problema? –
Debe finalizar sus matrices de cadenas con un puntero NULL para poder recorrerlas con sensatez: 'const char * strs [] = {" aa "," bb ", NULL};' –
Dependiendo del compilador, no funciona.Al compilador GNU de Linux le gusta y funciona, XCODE no lo hace y produce algunos errores extraños. – Woodgnome