LINUX.ORG.RU

История изменений

Исправление 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. Код ужасен. Сотри и забудь, как страшный сон.