Вы смущены о разнице между указателем и пространством, и указал на.
Ваш код не имеет нулевого указателя. Он нулевает указанное пространство. Функция memset
ведет себя так. На самом деле вы не захотите обнулить указатель, так как тогда он больше не будет указывать на выделенную вами память.
Ваш оператор printf
пытается напечатать значение указателя, на которое указывает адрес пространства. Не указывается содержимое пространства.
Фактически оператор printf вызывает неопределенное поведение, поскольку вы не определили спецификаторы формата. Ваш компилятор должен был предупредить об этом.
Вот некоторые правильный код:
printf("The buffer's address is %p\n", char_buffer);
printf("The buffer contains: %02X %02X %02X ...\n",
(unsigned char)char_buffer[0],
(unsigned char)char_buffer[1],
(unsigned char)char_buffer[2]);
Чтобы использовать %X
спецификатор вы должны пройти неотрицательные значения, поэтому бросок необходимо. Вместо этого вы можете объявить буфер как unsigned char *
, и в этом случае приведение не требуется.
FYI: http://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc – Barmar