fgets
#include <stdio.h>
char *fgets (char *str, int tamanho, FILE *fp);
A função fgets()
recebe 3 argumentos: o endereço do buffer onde será colocada a string lida (str
), o tamanho desse buffer (tamanho
), e o ponteiro para FILE
que está associado ao "stream" de onde a string será lida (fp
).
A função lê até um máximo de tamanho - 1
caracteres e guarda-os, sequencialmente, no buffer apontado por str
. A leitura de caracteres termina depois dum EOF
ou duma quebra de linha. Se foi lida uma quebra de linha, ela é guardada no buffer. O caracter \0
é também guardado no buffer imediatamente a seguir ao último caracter lido.
A principal vantagem em relação à gets()
é a possibilidade de controlar o buffer de forma a não haver estouro.
Exemplo de uso:
#include <stdio.h>
#include <string.h>
int main(void) {
char nome[100];
char *status;
status = fgets(nome, sizeof nome, stdin);
if (status == NULL) {
/* ou houve um erro (pode-se verificar com ferror())
** ou atingiu-se EOF antes de qualquer caracter ter sido lido
** (pode-se verificar com feof())
**
** de qualquer maneira o conteudo de (nome) não é válido */
} else {
size_t len;
len = strlen(nome);
if (len == 0) {
/* o teu sistema é estranho!
** isto so pode acontecer em ficheiros binários, e stdin não devia ser binário */
}
/* se o último caracter lido não foi uma quebra de linha */
if (nome[len - 1] != '\n') {
/* isso quer dizer que a linha actual é maior que o espaco reservado
** será necessário ler e tratar o resto da linha com outro fgets() */
}
}
return 0;
}