Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: class_OpenGL en 2 Julio 2016, 08:43 am



Título: (Consulta) fprintf imprime carácter de fin de archivo (-1)
Publicado por: class_OpenGL en 2 Julio 2016, 08:43 am
Hola, muy buenas. No estoy seguro de por qué pasa el problema, así que os vengo a preguntar. El caso es que vi una pregunta en este foro sobre C y quise crear un código para ver si yo sería capaz de hacerlo (tengo que hacer ejercicios xD). El caso es que el programa parece que realiza su cometido salvo por un aspecto: al final, al imprimir el resultado, a parte de imprimirse el resultado, se imprime un carácter de fin de archivo (0xFF o -1). Código:

Código
  1. #include <string.h>
  2. #include <limits.h>
  3. #include <stdio.h>
  4. #include <ctype.h>
  5.  
  6. void get_longest_prefix(char dest[], char *strings[], unsigned int num_strings);
  7.  
  8. int main() {
  9. char *strings[3][2] = {{"Planeta", "Platano"}, {"planetoide", "Platino"}, {"planetario", "Placenta"}};
  10. char result[16];
  11.  
  12. get_longest_prefix(result, (char **)strings, sizeof(strings)/sizeof(char *));
  13.  
  14. /*unsigned int i;
  15. for(i = 0; i < 16; i++)
  16. fprintf(stdout, "%u\n", result[i]);*/
  17.  
  18. fprintf(stdout, "Longest common prefix: %s", result);
  19.  
  20. fgetc(stdin);
  21. return 0;
  22. }
  23.  
  24. void get_longest_prefix(char dest[], char *strings[], unsigned int num_strings) {
  25. // No pongo el contenido de la función para no spoilear al que preguntó sobre  el ejercicio xD
  26. }

Salida:
Código:
Longest common prefix: pla _
NOTA: El guión simboliza el guión de la consola, eso no se imprime por el programa

Dense cuenta de que se imprime un espacio entre el último carácter y el guión de la consola.

Lo más extraño de todo es que si descomento el fragmento de código que me muestra la cadena en su valor numérico, este carácter de fin de archivo no se imprime. Si descomento el fragmento la salida queda:

Código:
112
108
97
0
0
0
0
0
5
0
0
0
0
0
0
0
Longest common prefix: pla_

Como ven, ahora no hay espacio entre la última a y el guión.

_______________________
NOTA ACLARATORIA. Sé que es un carácter de fin de archivo porque copié de la consola el carácter y lo pegué en un documento con la misma codificación que la consola (OEM-850), y luego abrí el archivo con HxD (visor hexadecimal) y vi que el carácter era 0xFF


Título: Re: (Consulta) fprintf imprime carácter de fin de archivo (-1)
Publicado por: MAFUS en 2 Julio 2016, 10:18 am
A lo mejor no tiene nada que ver, pero el argumento string que le pasas a la función bno deberías ser char***?


Título: Re: (Consulta) fprintf imprime carácter de fin de archivo (-1)
Publicado por: class_OpenGL en 2 Julio 2016, 10:28 am
Es un pequeño truco que he usado. Aunque en la función main es un arreglo bidimensional de punteros a char, la función pide un arreglo unidimensional. Esta conversión la puedo hacer así por como se organiza en el programa la memoria. Si fuera un arreglo dinámico bidimensional, no funcionaría si no se inicializa de una forma concreta.


Título: Re: (Consulta) fprintf imprime carácter de fin de archivo (-1)
Publicado por: class_OpenGL en 2 Julio 2016, 10:46 am
Vaaale. Ya sé dónde está el error :DD Era, por así decirlo, un error de lógica. No di información suficiente, porque pensé que no era necesario enseñar el contenido de la función, pero al final el problema estaba en la función :S No voy a poner el código por no spoilear a quien haga el ejercicio, pero diré que el problema no era por la conversión que mencionó MAFUS, sino que estaba poniendo el carácter de final de cadena (carácter nulo) en una posición superior a la que le correspondía. No tengo ni idea de por qué este error se produce solo con MinGW-w64, pero se soluciona al poner el fragmento de código puesto... Misterios de la vida :P

En fin, muchas gracias :D


Título: Re: (Consulta) fprintf imprime carácter de fin de archivo (-1)
Publicado por: AlbertoBSD en 2 Julio 2016, 11:48 am
Bueno aunque ya lo solucionaste, ¿es ese el programa de raven60?

http://foro.elhacker.net/programacion_cc/ayuda_por_favor_sobre_este_problema-t454625.0.html

Saludos!


Título: Re: (Consulta) fprintf imprime carácter de fin de archivo (-1)
Publicado por: class_OpenGL en 2 Julio 2016, 12:48 pm
Si, ese es el tema de donde saqué el ejercicio :P