Когда массив используется в качестве аргумента функции, он преобразуется в указатель на свой первый элемент. В результате функция не может получить размер массива, переданного в качестве параметра.
Относительно ваших попыток:
printf("%ld \n", sizeof(ptr));
Поскольку ptr
является char *
, это даст вам размер этого указателя (обычно 8).
printf("%ld \n", sizeof(*ptr));
Это даст вам размер, на который указывает ptr
, в частности char
, который определен как 1.
printf("%ld \n", strlen(ptr));
Предполагая, что ptr
указывает на строку с нулевым символом в конце, это даст вам длину строки.
Размер массива должен быть передан в качестве отдельного параметра, чтобы функция узнала его. Выражение sizeof(ptr)
, если оно используется в main
, даст вам размер массива в байтах.