Ferramentas de Usuário

Ferramentas de Site


dev_geral:c:fgets

fgets

FIXME este artigo precisa de ser revisto e aumentado. Colabore !
#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 (s), 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 (s). 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;
}
dev_geral/c/fgets.txt · Última modificação em: 2018/05/14 21:37 (edição externa)