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)
| | |-+  (Ayuda) Segmentation fault sin razón aparente
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: (Ayuda) Segmentation fault sin razón aparente  (Leído 6,126 veces)
AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.705


🏴 Libertad!!!!!


Ver Perfil WWW
Re: (Ayuda) Segmentation fault sin razón aparente
« Respuesta #10 en: 15 Junio 2016, 06:21 am »

¿Creo no se por que el fscanf es el del problema.

¿Por que no usas fgets?

Bueno claramente es un buffer overflow por que todo el apuntador de file es sobreescrito.

Otra opción es aumentar el buffer. aunque  sea dejale unos 8 bytes mas y sigue leyendo un maximo de 64.

Saludos


« Última modificación: 15 Junio 2016, 06:26 am por AlbertoBSD » En línea

class_OpenGL


Desconectado Desconectado

Mensajes: 437

Si usas Direct3D, no eres mi amigo :P


Ver Perfil
Re: (Ayuda) Segmentation fault sin razón aparente
« Respuesta #11 en: 15 Junio 2016, 06:29 am »

Funciona con fgets, pero me da rabia que crashee con fscanf cuando debería funcionar...

Por cierto, es muy extraño: usando el siguiente fragmento de código se leen más de 64 caracteres, mientras que en los otros ifs que usan la misma sintáxis no lee más de 64 (que es lo esperable):

Código
  1. fscanf(file, "%s[^64]", command);

¿POR QUÉ FUNCIONA SOLO A VECES XDD? Supongo que será un bug, pero es demasiado extraño...



Voy a dar por cerrado el tema, a parte de porque lo solucioné con fgets, dudo que vaya a encontrar el error que produce la función fscanf... Muchas gracias a todos por compartir su sabiduría y tiempo :D



La respuesta al problema... por fin la he hallado... Resulta que por alguna razón fscanf está ignorando el límite de caracteres. Lo he demostrado con el siguiente código:

Código
  1. #include <stdio.h>
  2.  
  3. int main() {
  4. char cadena[16];
  5.  
  6. fscanf(stdin, "%s[^16]", cadena);
  7. fprintf(stdout, cadena);
  8.  
  9. return 0;
  10. }

Este programa crashea si introduces una cadena de más de 16 caracteres...

Haré otra pregunta en el foro para saber por qué ignora el límite de caracteres. Muchas gracias a todos :D


« Última modificación: 16 Junio 2016, 09:29 am por Eternal Idol » En línea

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

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda con segmentation fault
Programación C/C++
puppetz 7 3,424 Último mensaje 26 Junio 2014, 23:58 pm
por Eternal Idol
segmentation fault en mi programa
Programación C/C++
:Luigi 3 4,977 Último mensaje 30 Noviembre 2014, 23:37 pm
por :Luigi
Segmentation Fault C++
Programación C/C++
marlboreano 6 3,876 Último mensaje 15 Enero 2015, 18:15 pm
por _Enko
Segmentation Fault ayuda
Programación C/C++
GominaTilted 8 3,689 Último mensaje 23 Marzo 2020, 02:08 am
por GominaTilted
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines