Ver Mensaje Individual
  #2 (permalink)  
Antiguo 08/08/2018, 02:00
Fw190
 
Fecha de Ingreso: junio-2010
Ubicación: Madrid
Mensajes: 617
Antigüedad: 8 años, 5 meses
Puntos: 73
Respuesta: Leer archivo con caracteres especiales

En principio, has declarado una variable

char* languageMessages[256];

Con esto, lo que has declarado es un array de 256 punteros a char. Pero los valores de estos punteros son, en principio, aleatorios (depende de lo que hubiera en memoria).

Posteriormente, estás copìando la línea que lees de tu fichero en el lugar al que apunta el elemento de languageMessages correspondiente, por lo que, al tener ese elemento un valor aleatorio, estás copiando tu línea del fichero en quién sabe donde.

Teniendo esto en cuenta, lo raro es que, al ejecutar el programa (suponiendo que se haya compilado sin errores) es que no te haya dado un error 'General Protection' ó 'Segmentation Fault'.

Tendrías que reservar memoria para cada uno de esos punteros del array que has declarado. Ya que comentas que el C no es tu fuerte, quizás sea mejor dejar de lado la asignación dinámica de memoria por el momento, y sustituir la declaración de languageMessages por (por ejemplo):

char languageMessages[256][256];

Con esto, estás creando un array de 256 cadenas de 256 caracteres (De todos modos, en C la variable de tipo cadena de caracteres como tal no existe, sino que son arrays de caracteres).

Otra cosa que veo es que estás utilizando &message_data[0]. En C, el nombre de un array representa la dirección del primer elemento, por lo que, donde escribes &message_data[0], puedes escribir simplemente message_data.

También veo que estás utilizando memcpy para copiar la línea que lees en tu array. Tratándose de cadenas de caracteres, y dado que lees de un fichero de texto, lo que leas serán cadenas de caracteres, es mejor (y más descriptivo de cara al mantenimiento del programa) utilizar la función strcpy():

strcpy(languageMessages[count], message_data);

que copiará message_data en languageMessages[count], incluyendo el carácter NULL (cero) que indica el final de cadena en C.

Prueba en primer lugar con esto, antes de meterte en más berenjenales con 'setlocale' y tipos 'wchar_t'

Saludos,