Leer datos por teclado en PHP

PHP – Leer datos por teclado

Si bien de manera general PHP es ejecutado en un servidor web a través de Apache, también podemos ejecutarlo desde la línea de comandos o terminal.

En este post te mostraré cómo leer datos por teclado, es decir, solicitar al usuario un valor y que éste lo ingrese por teclado usando PHP.

O simplemente leer la entrada que nos pueden pasar por un pipe o redireccionando un archivo. Básicamente vamos a leer de STDIN (entrada estándar) usando fscanf.

(más…)

C - Leer números separados por coma usando scanf

C – Escanear números separados por coma

En este post sobre C y scanf te enseñaré cómo leer dos números separados por coma. Es decir, solicitar al usuario que ingrese dos números separados por coma y escanearlos por separado usando scanf.

Por ejemplo, que el usuario digite 12,34 y que nosotros leamos los dos números 12 y 34 por separado.

Lo único que vamos a usar será scanf; función presente en stdio.h.

(más…)

Por parzibyte, hace
Redireccionar salida a archivo

Enviar contenido de archivo a programa y automatizar pruebas

En este post de programación te enseñaré a automatizar pruebas cuando solicitamos datos por teclado, sin importar el lenguaje de programación.

Cuando escribimos programas en donde se solicitan datos al usuario a través del teclado y probamos esos programas, debemos escribir los valores manualmente.

Si modificamos el programa o hay un error, lo volvemos a ejecutar y a llenar esos valores. Esto se hace tedioso cada vez, pues invertimos más tiempo probando que arreglando los errores o agregando mejoras.

Obviamente me estoy refiriendo a los programas por consola y en cuanto a “automatizar” me refiero a usar un archivo de texto con valores para pasarlos al programa en lugar de escribirlos manualmente.

Veamos entonces cómo automatizar la entrada de datos en programas. Te enseñaré un ejemplo con C y otro con Python, aunque este paradigma funcionará para cualquier otro lenguaje.

(más…)

Usar fgets y scanf en conjunto en C

C – Limpiar búfer al usar scanf y fgets

Hay un pequeño problema que ocurre en C al usar scanf en conjunto con fgets. Es decir, primero usar scanf para leer un valor, e inmediatamente después usar fgets.

El problema es que al usar scanf en primer lugar, el programa no “espera” a que el usuario introduzca la cadena con fgets. Como resultado, se lee una cadena vacía o “nada”.

Este error también se me ha presentado al usar scanf en algunos ciclos y en conjunto con otras funciones que leen de stdin.

Por eso hoy te mostraré una solución para este problema.

(más…)

Problema con scanf - No lee espacios al solicitar datos por teclado

C – Leer cadena con espacios

Al solicitar datos de tipo cadena por teclado en C lo más común es usar la función scanf con el formato %s, cosa que funciona bien excepto por dos cosas:

Así que hoy te mostraré cómo escanear o leer desde el teclado una cadena que incluya espacios en el lenguaje de programación C, misma que es una alternativa segura a scanf.

(más…)

Usar fgets en lugar de scanf en C

Cuando aprendemos algoritmos en C, la forma de escanear variables por teclado es a través de scanf. Si bien este método funciona, existe el peligro de un desbordamiento de búfer.

Antes que nada te invito a ver lo que es un desbordamiento de búfer en C.

fgets vs scanf en C

Después de que leíste lo del desbordamiento es hora de ver por qué es mejor usar fgets en lugar de scanf. Esto es porque fgets escanea una variable pero únicamente hasta donde le digamos; es decir, nosotros le decimos cuánto debe leer (el tamaño).

Scanf en cambio no hace eso, lee todo dentro de la posición en memoria.

(más…)

Desbordamiento de búfer en C

Hoy veremos lo que es un desbordamiento de búfer en C y cómo puede (en su forma más simple) hacer que un usuario aproveche esa vulnerabilidad para explotar nuestro programa.

Nota: esto es diferente a cuando se desborda una variable.

Lo que es un desbordamiento de búfer

Según la Wikipedia:

En seguridad informática y programación, un desbordamiento de búfer (del inglés buffer overflow o buffer overrun) es un error de software que se produce cuando un programa no controla adecuadamente la cantidad de datos que se copian sobre un área de memoria reservada a tal efecto (buffer): Si dicha cantidad es superior a la capacidad preasignada, los bytes sobrantes se almacenan en zonas de memoria adyacentes, sobrescribiendo su contenido original, que probablemente pertenecían a datos o código almacenados en memoria. Esto constituye un fallo de programación.

En otras palabras le da al usuario de nuestro programa la forma de sobrescribir una variable a su antojo; bueno, no siempre y no tan fácil, pero alguien con tiempo puede encontrarlas y explotarlas.

Esto es peligroso en programas que se van para producción, por ejemplo un sistema de la apertura de una puerta o cosas de esas que tienen que ver con la seguridad.

(más…)