История изменений
Исправление SkyMaverick, (текущая версия) :
Потому что функция write определена как
#include <unistd.h>
ssize_t write(int fd, const void buf[.count], size_t count);
Что как-бы говорит нам, что функции пофигу, что за указатель ей подсунули, главное, что она это интерпретирует как не типизированный указатель на какой-то блок данных, размером count.
По сути char *ptr_to_char = &test;
получилась строка на стеке из одного символа (не терминированная, поэтому до первого нуля). Второе - указатель на эту строку. А при вызове функции указатель снят *ptr_to_ptr
, что даёт нам исходную строку, которая также является char *str[] (потому что массивы - это сахар над указателями), с count=1.
PS. Код ужасен. Сотри и забудь, как страшный сон.
Исходная версия SkyMaverick, :
Потому что функция write определена как
#include <unistd.h>
ssize_t write(int fd, const void buf[.count], size_t count);
Что как-бы говорит нам, что функции пофигу, что за указатель ей подсунули, главное, что она это интерпретирует как не типизированный указатель на какой-то блок данных, размером count.
По сути char *ptr_to_char = &test;
получилась строка на стеке из одного символа (не терминированная, поэтому до первого нуля). Второе - указатель на эту строку. А при вызове функции указатель снят, что даёт нам исходную строку, которая также является char *str[] (потому что массивы - это сахар над указателями), с count=1.
PS. Код ужасен. Сотри и забудь, как страшный сон.