Что означает (char *) 0 в c? - PullRequest
4 голосов
/ 20 мая 2011
if ( fgets( line, sizeof(line), stdin ) == (char*) 0 )...

Я не понимаю, что делает эта строка, кто-нибудь знает?

Ответы [ 6 ]

4 голосов
/ 20 мая 2011

Это довольно странный способ написания теста для возврата нулевого указателя, который указывает на ошибку в fgets().

Я бы написал так:

if (!fgets(line, sizeof(line), stdin))
3 голосов
/ 20 мая 2011
(char*) 0

Это не пустой символ, а указатель на символ по адресу 0.

Символ, содержащий значение 0, будет:

(char) 0
2 голосов
/ 20 мая 2011

Это означает нулевой указатель на символ.Было бы то же самое, если вы замените (char *) 0 на NULL.В этом конкретном случае он проверяет, больше ли нечего читать со стандартного ввода.Я думаю, что это просто способ быть загадочным и демонстрировать некоторые захватывающие и красивые функции.Если вы замените его на NULL, вы получите удобочитаемость без изменения семантики.

1 голос
/ 20 мая 2011

(char *) 0 создает нулевой указатель. Итак, вы видите, является ли значение fgets нулевым.

В документации по fgets указано, что он возвращает ноль, если произошла ошибка или вы достигли конца файла.

Кажется, что полный оператор проверяет, находитесь ли вы в конце файла, и, если это так, всплывают (хотя это предположение).

1 голос
/ 20 мая 2011

Строка проверяет, возвращает ли fgets 0. Приведение к char* только для соответствия типу возврата fgets:

char * fgets ( char * str, int num, FILE * stream );

Но 0 неявно преобразуется в char*, еслиВы удалите его.

Если вам нужна дополнительная информация о fgets, посмотрите здесь

0 голосов
/ 20 мая 2011

Это просто проверка результатов fgets для нулевого символьного указателя.

По данным cplusplus.com

Возвращаемое значение

В случае успеха, функция возвращает тот же параметр str. Если Конец файла встречается и нет символы были прочитаны, содержимое str остается неизменным и нулевой указатель возвращается.

Если ошибка происходит, возвращается нулевой указатель.

Используйте либо ferror, либо feof для проверки произошла ошибка или Конец файла достигнут.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...