Pesquisa de site

fgets() e gets() na programação C


Introdução

Todos nós estamos familiarizados com a função scanf(). É a função principal aplicável para obter entradas básicas do usuário. Embora scanf() funcione muito bem ao receber entradas como inteiro, caractere, ponto flutuante, etc. Certamente fica para trás ao receber entradas de string contendo espaços em branco. Vejamos um exemplo,

#include<stdio.h>
int main()
{
    char string[10];
    printf("Enter the string: ");
    scanf("%s", string);
    printf("\n %s",string);
    return 0;
}

Saída:

Como podemos observar no exemplo acima. scanf() interrompe a varredura assim que encontra um espaço em branco ou uma nova linha. Isso, de fato, torna a entrada de strings usando scanf() um pouco problemática. Isso pode ser facilmente evitado usando algumas outras funções de entrada como gets() e fgets().

Neste artigo, vamos aprender como aplicar ambas as funções e compará-las lado a lado.

função get() em C

gets() é uma função pré-definida em C que é usada para ler uma string ou uma linha de texto. E armazene a entrada em uma variável de string bem definida. A função encerra sua sessão de leitura assim que encontra um caractere de nova linha.

Sintaxe:

get(nome da variável);

O código abaixo ilustra o uso da função gets(),

#include<stdio.h>
int main()
{
    char string[10];
    printf("Enter the String: ");
    gets(string);
    printf("\n%s",string);
    return 0;
}

Saída:

Compare a saída com a do uso de scanf(). 'Hello World' agora é tratado como uma única string.

função fgets() em C

A biblioteca C padrão também nos fornece outra função, a função fgets(). A função lê uma linha de texto ou uma string do arquivo ou console especificado. E, em seguida, armazena-o na respectiva variável de string.

Semelhante à função gets(), fgets também encerra a leitura sempre que encontra um caractere de nova linha. Além disso, ao contrário de gets(), a função também para quando o EOF é atingido ou mesmo se o comprimento da string exceder o limite especificado, n-1.

Sintaxe,

fgets(char *str, int n, FILE *stream)

  • str - É a variável na qual a string vai ser armazenada
  • n - É o comprimento máximo da string que deve ser lida
  • stream - É o filehandle, de onde a string deve ser lida.

Felizmente, podemos ler linhas de texto de um arquivo ou do fluxo de entrada padrão usando a função fgets(). Vamos ver como

1. Leia de um determinado arquivo usando fgets()

Por exemplo,

#include<stdio.h>
int main()
{
    char string[20];
    FILE *fp;
    fp=fopen("file.txt","r");
    fgets(string,20,fp);
    printf("The string is: %s",string);
    fclose(fp);
    return 0;
}
    

Considere file.txt para conter a linha 'JournalDev fgets() exemplo!'. Nesse caso, a saída do código acima seria,

2. Leia do stdin usando fgets()

#include<stdio.h>
int main()
{
    char string[20];
    printf("Enter the string: ");
    fgets(string,20,stdin);         #input from stdin stream
    printf("\nThe string is: %s",string);
    return 0;
}

Saída:

Conclusão

Mesmo que ambas as funções, gets() e fgets() possam ser usadas para ler entradas de string. A maior diferença entre os dois é o fato de que o último permite ao usuário especificar o tamanho do buffer. Portanto, é altamente recomendado sobre a função gets().

A função gets() não tem provisão para o caso se a entrada for maior que o buffer. Como resultado, pode ocorrer entupimento de memória. Esta é a parte onde a função fgets() brilha e fornece uma solução definitiva.

Referências

  • /community/tutorials/strings-in-c-programming
  • https://stackoverflow.com/questions/19748307/use-of-fgets-and-gets

Artigos relacionados: