Ir para o conteúdo

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;
}