UC3M

Grado en Ing. Telemática/Sist. Audiovisuales/Sist. de Comunicaciones

Arquitectura de Sistemas

Septiembre 2017 - Enero 2018

8.4. Funciones de entrada para leer strings de manera segura

Como hemos visto en el apartado anterior, las funciones gets y scanf usadas para leer cadenas de caracteres son propensas a errores, pues no controlan que el usuario haya introducido más caracteres que el que puede albergar el array definido para almacenarlos. Para ello, contamos con dos funciones que hacen segura la lectura de cadenas introducidas por el usuario, que son fgets y getline.

8.4.1. La función fgets

La sintaxis de la función fgets es:

#include <stdio.h>
char *fgets(char *s, int n, FILE *stream);

s referencia a un array de caracteres, que almacena lo que lee de un fichero apuntado por stream. n especifica el número máximo de elementos del array (caracteres). La función lee hasta n-1 caracteres, y añade el caracter nulo para que la cadena quede bien formada. Si no ha llegado hasta n-1 caracteres pero llega a un caracter de nueva línea, '\n', también para de leer y devuelve la cadena (con ese carácter de nueva línea incluido). Si no hay errores, la función devuelve el puntero s. Si encuentra el final de fichero (EOF) o existe algún error, devuelve null.

fgets es así más segura que gets, pero tienes que lidiar con un par de cosas. Una es que si has introducido más caracteres de los que ha podido leer, el resto de caracteres se quedan en el buffer de entrada (en stdin), así que tendrás que eliminarlos para que no sean leídos en el próximo fgets si no quieres. Lo segundo es que fgets incluye el carácter '\n' al final, así que tendrás que quitarlo.