Od The GNU C Programming Tutorial:Dlaczego funkcja fgets jest przestarzała?
fgets
funkcji ("file get string") jest podobny do dostaje funkcję. Ta funkcja jest przestarzała - co oznacza, że jest przestarzała i zdecydowanie zaleca się, abyś jej nie używał - ponieważ jest niebezpieczny pod względem niebezpieczeństwa . Jest to niebezpieczne, ponieważ jeśli dane wejściowe zawierają znak zerowy , nie można powiedzieć. Nie używajfgets
, chyba że wiesz, że dane nie mogą zawierać wartości null. Nie używaj go do odczytywania plików edytowanych przez użytkownika , ponieważ jeśli użytkownik wstawi pusty znak, powinieneś go odpowiednio obsłużyć lub wydrukować czysty komunikat o błędzie. Zawsze używajgetline
lubgetdelim
zamiastfgets
, jeśli możesz.
Myślałem funkcja fgets
zatrzymuje się, gdy napotka \0
lub \n
; dlaczego ta strona podręcznika sugeruje, że bajt zerowy jest "niebezpieczny", gdy fgets
powinien poprawnie obsłużyć dane wejściowe? Ponadto jaka jest różnica między getline
i fgets
, a funkcja fgets
jest naprawdę uważana za przestarzałą w przyszłych standardach C?
Tak więc 'fgets' zachowuje czytanie przeszłych bajtów zerowych, szukając tylko znaku nowej linii? –
@VilhelmGray: Zgadza się i nie będzie ci tego mówić. Nie ma sposobu, aby upewnić się, że pierwsze znalezione \ 0 zostało dodane przez 'fgets' lub nie. –
bajty null nie należą do plików ** tekstowych.'fgets()' zostało zaprojektowane do pracy z plikami tekstowymi: używanie 'fgets()' z plikami danych binarnych nie jest zalecane. – pmg