Самая большая проблема с этим кодом заключается в том, что в зависимости от вашей реализации он может скомпилироваться без ошибок.
Проблемы, как другие говорили, что NULL
предназначен для представления Нуля указателя значения, а не нулевая символов значения. Используйте '\0'
для обозначения нулевого символа. (Или вы можете использовать 0
, что эквивалентно, но '\0'
выражает намерение более четко.)
NULL
макрос, который расширяется к реализации определенных нулевого указателя постоянной. Константа нулевого указателя может быть либо целочисленным константным выражением со значением 0
, либо таким выражением, отлитым от void*
. Это означает, что NULL
может быть определен как 0
или как ((void*)0)
(среди прочих вариантов).
Очевидно, ваша реализация определяет его как нечто вроде ((void*)0)
, поэтому вы получили предупреждающее сообщение. (Он мог бы, и ИМХО должен был рассматриваться как фатальная ошибка).
Так что никогда не пытайтесь использовать NULL
, кроме как в качестве константы нулевой указатель, и не рассчитывайте на компилятор, чтобы предупредить вас, если вы его неправильно используете.
попробуйте сравнить с '\ 0' :) coz NULL of the course - указатель. – Milee