Da The GNU C Programming Tutorial:Perché la funzione fgets è deprecata?
La funzione
fgets
("file get stringa") è simile alla funzione di ottiene. Questa funzione è deprecata - ciò significa che è obsoleto ed è fortemente consigliato non utilizzarlo - perché è pericoloso. È pericoloso perché se i dati di input contengono un carattere nullo , non puoi dirlo. Non utilizzarefgets
a meno che non si sappia che i dati non possono contenere un valore nullo. Non usarlo per leggere i file modificati dall'utente perché, se l'utente inserisce un carattere nullo, è necessario o gestirlo correttamente o stampare un messaggio di errore chiaro. Utilizzare sempregetline
ogetdelim
invece difgets
se possibile.
ho pensato la funzione fgets
arresta quando incontra un \0
o \n
; perché questa pagina di manuale suggerisce che un byte null è "pericoloso" quando fgets
dovrebbe gestire correttamente l'input? Inoltre, qual è la differenza tra getline
e fgets
ed è la funzione fgets
veramente considerata deprecata nel C99 o futuri standard C?
Quindi 'fgets' continua a leggere i byte null passati, cercando solo il carattere di nuova riga? –
@VilhelmGray: è giusto, e non ti dirà che è successo. Non c'è modo di essere sicuri che il primo '\ 0' che trovi sia stato aggiunto da 'fgets' o no. I byte null –
non appartengono ai file ** di testo **.'fgets()' è stato progettato per funzionare con file di testo: l'uso di 'fgets()' con file di dati binari non è raccomandato. – pmg