elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección.


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  (Consulta) fprintf imprime carácter de fin de archivo (-1)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: (Consulta) fprintf imprime carácter de fin de archivo (-1)  (Leído 1,381 veces)
class_OpenGL


Desconectado Desconectado

Mensajes: 437

Si usas Direct3D, no eres mi amigo :P


Ver Perfil
(Consulta) fprintf imprime carácter de fin de archivo (-1)
« en: 2 Julio 2016, 08:43 »

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


En línea

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL
MAFUS


Desconectado Desconectado

Mensajes: 1.474



Ver Perfil
Re: (Consulta) fprintf imprime carácter de fin de archivo (-1)
« Respuesta #1 en: 2 Julio 2016, 10:18 »

A lo mejor no tiene nada que ver, pero el argumento string que le pasas a la función bno deberías ser char***?


En línea

while(is_alive(yourself)) {
    make_true(yourself, yourdreams);
}
class_OpenGL


Desconectado Desconectado

Mensajes: 437

Si usas Direct3D, no eres mi amigo :P


Ver Perfil
Re: (Consulta) fprintf imprime carácter de fin de archivo (-1)
« Respuesta #2 en: 2 Julio 2016, 10:28 »

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.
En línea

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL
class_OpenGL


Desconectado Desconectado

Mensajes: 437

Si usas Direct3D, no eres mi amigo :P


Ver Perfil
Re: (Consulta) fprintf imprime carácter de fin de archivo (-1)
« Respuesta #3 en: 2 Julio 2016, 10:46 »

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
En línea

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL
AlbertoBSD
Programador y
Colaborador
***
Desconectado Desconectado

Mensajes: 3.465


🏴 Libertad!!!!!


Ver Perfil WWW
Re: (Consulta) fprintf imprime carácter de fin de archivo (-1)
« Respuesta #4 en: 2 Julio 2016, 11:48 »

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!
« Última modificación: 2 Julio 2016, 12:16 por AlbertoBSD » En línea

class_OpenGL


Desconectado Desconectado

Mensajes: 437

Si usas Direct3D, no eres mi amigo :P


Ver Perfil
Re: (Consulta) fprintf imprime carácter de fin de archivo (-1)
« Respuesta #5 en: 2 Julio 2016, 12:48 »

Si, ese es el tema de donde saqué el ejercicio :P
En línea

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines