(SOLUCIONADO) me dicen si les funciona!!

Iniciado por ;c1v!c, 21 Febrero 2011, 04:39 AM

0 Miembros y 1 Visitante están viendo este tema.

Ferno

#10
Si escribes "%c" el programa espera leer un char y guardarlo en la variable.
Si escribes "%s" el programa espera leer un string y guardarlo en la variable.

Tu problema radicaba en la lectura del caracter de salto de línea ('\n') el cual queda almacenado en el buffer de entrada cuando apretas enter al momento de escribir un caracter o de realizar determinada entrada de datos por el stdin. Cuando ingresabas el primer caracter y le dabas a enter, había dos caracteres almacenados en el buffer, el que tu escribiste, y el enter. El primero, se le asignaba a tu variable, el segundo, se le asignaba a la próxima variable tipo char la cual pedías tomar un valor!

Lo que podías hacer era fabricarte una funcion para recortar ese caracter de salto de línea.

Tu problema se solucionó al incluir "%s" porque así, el programa toma TODA la línea (y no solo un caracter por vez), es decir, toma tanto el caracter que tu escribistes, como el salto de línea. Si no estoy mal, y corríjanme si me equivoco, lo que sucede ahora es que, como tu variable soporta solo 1 byte por ser del tipo char, se le asigna el primer caracter a esta, y se "elimina" el caracter de salto de línea.

;c1v!c

Buenisimo ferno!!
gracias por aclararme la duda.

Saludos!! ;-)

Garfield07

El problema es cuando metes más de un carácter... BoF total y nunca más claro :P Con %s debería soltarte un waring, es un fallo de seguridad serio... Sencillamente abrid el programa con GDB y meterle unas 20 ases...


* Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente.
* No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado.
* Si compila esta bien, si arranca es perfecto.

¡Wiki elhacker.net!
Un saludo