GETS(3)

NOME
fgetc, fgets, getc, getchar, gets, ungetc - entrada de caracteres e seqüencia de caractere

SINÓPSE
#include <stdio.h>

int fgetc(FILE *stream);
char *fgets(char *s, int size, FILE *stream);
int getc(FILE *stream);
int getchar(void);
char *gets(char *s);
int ungetc(int c, FILE *stream);

DESCRIÇÃO
fgetc() lê o próximo caractere de stream e o retorna como unsigned char projetado (ou seja, é feito um type cast) em um int, ou EOF no fim do arquivo ou erro.

getc() é equivalente a fgetc() exceto que ela pode ser implementada como uma macro que avalia stream mais de uma vez.

getchar() é equivalente a getc(stdin).

gets() lê uma linha de stdin para o 'buffer' apontado por s até a nova linha do final ou EOF, o qual ela substitui com '\0'. Nenhuma verificação de estouro de 'buffer' é realizada (veja PROBLEMAS abaixo).

fgets() lê no máximo size caracteres de stream e os guarda no 'buffer' apontado por s. A leitura para depois de um EOF ou uma nova linha. Se uma nova linha é lida, ela é guardada no 'buffer'. Um '\0' é guardado depois do último caractere no 'buffer'.

ungetc() repõe c de volta a stream, projetado (type cast) em um unsigned char, onde ele está disponível para operações de leitura subseqüentes. Caracteres repostos serão retornados na oderm reversa; apenas uma reposição é garantida.

Chamadas às funções descritas aqui podem ser misturadas entre si e com chamadas a outras funções de entrada da biblioteca stdio para o mesmo arquivo de entrada.

VALORES RETORNADOS
fgetc(), getc() e getchar() retornam o caracatere lido como um unsigned char projetado (type cast) em um int ou EOF no fim do arquivo ou erro.

gets() e fgets() retornam s no sucesso, e NULO no erro ou quando o fim do arquivo ocorre e nenhum caractere foi lido.

ungetc() retorna c no sucesso, ou EOF no erro.

DE ACORDO COM
ANSI C, POSIX.1.

PROBLEMAS
Nunca use gets(). Porque é impossível saber, sem conhecer antecipadamente os dados, quandos caracteres gets() vai ler, e porque gets() vai continuar a guardar caracteres ultrapassado o fim do 'buffer', ela é extremamente perigosa de usar. Este comportamento tem sido utilizado para quebrar a segurança de computadores. Use fgets() no seu lugar.

Não é recomendável misturar chamadas a funções de entrada da biblioteca stdio com chamadas de baixo nível a read() para o descritor do arquivo associado com op arquivo de entrada; os resultados serão indefinidos e, muito provavelmente, não serão aquilo que você deseja.

VEJA TAMBÉM
read(2), write(2), fopen(3), fread(3), scanf(3), puts(3), fseek(3), ferror(3).

TRADUZIDO POR LDP-BR em 28/05/2001.

  Tradução:
Felipe M Pereira <Felipe.Pereira@ic.unicamp.br>

  Revisão.:
André Luiz Fassone <lonely_wolf@ig.com.br>