La Web del Programador: Comunidad de Programadores
 
    Pregunta:  29124 - COMO PREDETERMINAR EL NÚMERO DE ENTRADAS A LEER?
Autor:  Pedro Gomez
Me gustaria saber como puedo hacer para leer un dato con el gets() y que corte la lectura en cierto numero de caracteres leidos.
Muchas gracias.

  Respuesta:  k_mbe_t
He respondido eso mismo en otro foro, mirate: http://www.prehackers.com/foros/index.php?board=23;action=display;threadid=616

De todas formas te respondo

Nunca debes usar gets precisamente por eso, porque desborda el buffer donde guarda lo leido si metes más caracteres de los que permite. En su lugar usa fgets.Te pongo lo que dice el man de Linux sobre el tema :

Función gets:

char *gets(char *s);

"gets() lee una línea de stdin y la guarda en el búfer al
que apunta s hasta que se encuentre bien un carácter ter-
minador nueva-línea, bien EOF, al cual reemplaza con '\0'.
No se hace ninguna comprobación de desbordamiento del
búfer"

Función fgets:

char *fgets(char *s, int tam, FILE *flujo);

"fgets() lee como mucho uno menos de tam caracteres del
flujo y los guarda en el búfer al que apunte s. La lec-
tura se para tras un EOF o una nueva-línea. Si se lee una
nueva-línea, se guarda en el búfer. Tras el último
carácter en el búfer se guarda un '\0'.

flujo es un flujo de entrada, Si quieres que sea el teclado pones stdin, si no un descriptor de fichero de donde leer.
O sea que si quisieras leer una cadena de 10 caracteres desde teclado y guardarla en la variable char cadena[10] harías:

fgets(cadena, 10, stdin)

Y ya está.

Un saludo