sizeof дает размер в байтах передаваемой ему переменной.Вы передаете массив указателей (указывающих на строки) на sizeof.Массивы в C «распадаются» на указатели, поэтому вы получаете указатель на первый элемент в вашем массиве указателей.
И тогда вы правильно получаете размер указателя в байтах (4 байта = 32 бита).адресная шина).
Из-за правила "распада массива" невозможно получить фактические размеры ячеек памяти строковых литералов через этот указатель по той же причине, по которой вы не можете получить размер массивачерез указатель ptr в этом примере:
char array[10] = "...";
char* ptr = &array;
Решение состоит в том, чтобы либо хранить массивы другим способом, где вы можете использовать sizeof на самих массивах (как настоящий 2D-массив), либо хранитьвсе размеры массива в справочной таблице:
const size_t STRING_SIZES[] =
{
sizeof("BEST123, "),
sizeof("Best2233, "),
sizeof("ABCDEFGH, "),
sizeof("123456, "),
sizeof("helloworld, ")
};