По соглашению, строки в C завершаются NUL. Это означает, что конец строки определяется наличием символа «NUL». Символ NUL - это символ '\0'
или, более конкретно, char
со значением 0. Все строковые литералы C заканчиваются NUL, и большинство C API, которые принимают строки (как в стандартной библиотеке, так и в большинство других библиотек, написанных на C), ожидают, что эти строки будут завершены NUL.
Это также означает, что символ NUL не может использоваться в качестве нормального значения данных в API, которые ожидают завершения NUL . Эти API-интерфейсы будут рассматривать символ NUL не как значимую часть данных строки, а как конец строки. Например, strlen("foo\0bar")
равно 3, а не 7.
fgets
считывает символьные данные из файлового потока. Но этот файл может содержать символы NUL. В этом сообщении говорится, что fgets
будет обрабатывать символы NUL в файле точно так же, как любой другой символ. fgets
завершает указанную строку NUL, но если файл содержит символы NUL, fgets
послушно их прочитает.
Это то, о чем предупреждает сообщение: fgets
не обрабатывает NUL-символы отличаются от любых других символов, в отличие от большинства других функций C API. Поэтому, если вы передадите строку, сгенерированную fgets
, некоторому API, который ожидает завершения NUL, у вас может возникнуть проблема, если этот файл содержит символы NUL.