PUBLICIDAD


Función gets, fgets y puts - Programación en C


Introducción

Cuando hablamos de cadenas de caracteres es importante resaltar cuales son las funciones que se utilizan para manejar este tipo de datos. En este artículo analizaremos las funciones básicas para entrada y salida de una cadena de caracteres.

Marco teórico

gets: Función que se encarga de leer y almacenar una cadena de caracteres introducida mediante el teclado. La variable es guardada hasta que haya un salto de línea (“\n”), sin embargo, el salto de línea NO se guarda. La función gets en C automáticamente agrega un carácter de terminación NULL (“\0”); además es capaz de guardar cualquier tipo de caracter, incluido los espacios en blanco y no tiene ninguna limitante en cuanto al tamaño de la cadena de caracter que se introduce. Para poder utilizar esta función es necesario incluir la librería “string.h”. La sintaxis para utilizar la función es la siguiente:

Código:

gets(nombre_cadena);

fgets: Función que se encarga de leer o almacenar una cadena de caracteres introducida mediante el teclado. La variable es guardada hasta que haya un salto de línea (“\n”), el salto de línea SI se guarda. La función fgets automáticamente agrega un carácter de terminación NULL (“\0”); además es capaz de guardar cualquier tipo de caracter, incluido los espacios en blanco, pero SI tiene limitante en cuanto al tamaño de la cadena de caracter que se introduce. Para poder utilizar esta función es necesario incluir la librería “string.h”. La sintaxis para utilizar la función es la siguiente:

Código:

fgets(nombre_cadena, numero_caracteres, FILE);

Donde:

Por ejemplo, si queremos guardar una cadena de caracteres con el nombre “palabra”, que tenga un máximo de 25 caracteres, y que la fuente provenga de lo que introduzca el usuario, la sintaxis seria la siguiente:

Código:

fgets(palabra, 25, stdin);

puts: Función que se encarga de mostrar (Dato de salida) una cadena de caracteres especifica. Es el equivalente al “printf”, sin embargo, por cuestiones de seguridad es recomendado utilizar puts para el uso de cadena de caracteres (string). Para poder utilizar esta función es necesario incluir la librería “string.h”. La sintaxis para utilizar la función es la siguiente:

Código:

puts(nombre_cadena);

Diferencia entre gets y fgets: La diferencia entre la función gets y fgets es que la función gets no tiene ninguna limitante en cuanto al tamaño de la cadena de caracter que se guarda, mientras que la función fgets si tiene un numero de caracteres limite aceptados y establecidos por el programador. La función fgets también tiene como diferencia que sí guarda el salto de línea “\n”, mientras que la función gets no. fgets es una función más segura, pues al tener una cantidad de caracteres limitado, se previene un desbordamiento de búfer (buffer overflow), que los datos se sobrescriban en partes de memoria que no se desee y perder información de variables.


Diferencia entre scanf y gets: La diferencia es que scanf no puede guardar un espacio en blanco como cadena de caracteres, por ejemplo, si intentas guardar “Comprar artículo” no podrás porque scanf detecta el espacio como señal de fin de cadena, solo guardaría “Comprar”, en cambio, gets si guarda el espacio también y lo incluye como parte de la cadena. Por lo tanto, gets se utiliza solo para guardar datos tipo string (cadenas de caracteres), y scanf para el resto, por ejemplo valores numéricos.


Declarar librería string: Como hemos comentado, para utilizar gets, fgets y puts es necesario declarar la librería string.h, la sintaxis para hacerlo es la siguiente:

Código:

#include<string.h>


Publicidad


Ejemplos

Ejercicio 1: Realizar un programa donde el usuario pueda ingresar una cadena de caracteres (limitado a 20 caracteres) y posteriormente mostrarlo, utilizar función “gets”.

Código:

/* Ejemplo de uso de función "gets" - Por Solución Ingenieril*/
#include <stdio.h> /* Declaración librerías*/
#include <stdlib.h>
#include <string.h>

int main() {
	char cadena[20]; //Declaramos nuestra cadena con límite de caracteres
	
	printf("Ingresa la cadena que deseas guadar: \n"); //Solicitamos captura de datos	
	gets(cadena); //Guardamos la variable en "cadena"
	printf("\n"); //Salto de línea
	printf("La cadena guardada es: "); 
	puts(cadena); //Desplegamos el valor de la variable "cadena"
	return 0;
}

Ejercicio 2: Realizar un programa donde el usuario pueda ingresar una cadena de caracteres (limitado a 20 caracteres) y posteriormente mostrarlo, utilizar función “fgets”.

Código:

/* Ejemplo de uso de función "fgets" - Por Solución Ingenieril*/
#include <stdio.h> /* Declaración librerías*/
#include <stdlib.h>
#include <string.h>


int main() {
	char cadena[20]; //Declaramos nuestra cadena con límite de caracteres
	
	printf("Ingresa la cadena que deseas guadar: \n"); //Solicitamos captura de datos	
	fgets(cadena,20,stdin); //Guardamos la variable en "cadena"
	printf("\n"); //Salto de línea
	printf("La cadena guardada es: "); 
	puts(cadena); //Desplegamos el valor de la variable "cadena"
	return 0;
}

Resultados

Ejercicio 1: Como podemos observar, al utilizar la función gets no pone ninguna limitante en cuanto a la cantidad de caracteres que puede guardar, permitiendo así guardar y mostrar una cadena de más de 20 caracteres, incluso aunque la capacidad de nuestra variable sea 20 caracteres, por lo tanto, podemos decir que es un error.

Función gets, fgets y puts - 1

Ejercicio 2: En este caso, al utilizar la función fgets y decirle que la cantidad máxima es 20 caracteres, al intentar guardar una cadena de más de 20 caracteres no lo permite, y solo guarda los primeros 20 caracteres. En este ejemplo no hay ningún error, por lo tanto, concluimos que la mejor forma guardar cadenas de caracteres es con fgets.

Función gets, fgets y puts - 2

Conclusión

Saber la diferencia entre las distintas funciones para manejar cadenas de caracteres es algo muy importante a la hora de programar. Si no hacemos el uso correcto de las funciones y respetamos las limitantes con las cuales fueron creadas podríamos crear un error de programación e inclusive hacer vulnerable nuestro programa ante ataques de seguridad. En este artículo analizamos que es una función gets, fgets y puts, además de analizar sus diferencias y en que situaciones debemos utilizarlas.






Agregar comentario
1500
Ingresa la tercera letra de la palabra ¨Integral¨.
Comentarios
(1)
Gravatar
ervin dice...

hola buenas noches/tardes tengo una duda con la funcion gets/fgets la utilizo como el ejemplo pero quiero usarlo en una estructura dentro de una funcion

para cargar productos en un stock pero solo me devuelve un numero 1en vez de dejarme ingresar manual

©2017-2021 Solución Ingenieril. Todos los derechos reservados