Funzione gets per leggere stringhe in C

La funzione gets del linguaggio C permette di leggere una riga dallo stdin (standard input) e di immagazzinarla all’interno di una stringa specificata. In particolare la gets è in grado di leggere il contenuto dello stdin fino a che non viene riscontrato il carattere newline '\n' (a capo) oppure EOF (end of file).
Il suo funzionamento risulta essere molto simile a quello della funzione scanf, infatti entrambe le funzioni, una volta chiamate, aspettano fino a che non si raggiunge la fine della riga oppure si riscontra un errore. Di seguito viene riportata la sintassi della funzione gets:



char *gets(char *str);

dove str è il puntatore all’array di caratteri dove la stringa letta verrà immagazzinata, mentre come valore di ritorno la funzione restituisce il puntatore all’array di caratteri str, oppure NULL in caso di errore o di end of file se è stato raggiunta la fine della riga e nessun carattere è stato letto.

Nota: la funzione gets allo stato attuale risulta essere deprecata, ovvero il suo utilizzo è fortemente sconsigliato per motivi di sicurezza. Il suo utilizzo può causare dei buffer overflow, cioè delle situazioni in cui si cerca di scrivere dati di dimensione maggiore rispetto allo spazio allocato in memoria. Per questo motivo si consiglia di sostituirla con la funzione fgets, in cui bisogna indicare il numero massimo di caratteri da leggere.

Esempio di utilizzo della funzione gets in C

Nel seguente esempio viene creato un programma in C che chiede all’utente di scrivere un nome che verrà letto dal programma, utilizzando la funzione gets e successivamente stampato a schermo con la funzione printf.
Per poter immagazzinare la stringa letta dallo stdin, dobbiamo creare un array di caratteri con una dimensione predefinita, che assegneremo alla gets come parametro.



#include <stdio.h>

int main(){
    char nome[100];
    printf("Inserisci nome: ");
    gets(nome);
    
    printf("Hai inserito: %s",nome);

    return 0;
}

Bisogna fare molta attenzione con l’assegnazione della dimensione dell’array di caratteri, infatti se l’utente inserisce più caratteri della dimensione assegnata all’array si va incontro ad un buffer overflow e il programma termina restituendo un errore. Per evitare un problema del genere bisogna essere certi che l’utente non inserisca più caratteri del dovuto, oppure fare uso di altre funzioni che richiedono il numero massimo di caratteri da leggere, come la fgets.

Indice pagine linguaggio C: