Краткий ответ «нет»; в C нет способа получить количество элементов в массиве на основании только одного выражения массива . Трюк sizeof
почти так же хорош, как его можно получить, и его использование ограничено выражениями типа массива. Таким образом, следующее не будет работать:
char *foo = malloc(1024);
size_t count = sizeof foo;
count
получает количество байтов для типа указателя (4 в типичной архитектуре рабочего стола), а не в выделенном блоке.
char arr[100];
char *p = arr;
size_t count = sizeof p;
То же, что и выше.
void foo(char *arr)
{
size_t count = sizeof arr; // same as above
...
}
void bar(void)
{
char array[100];
foo(array);
...
}
То же, что и выше.
Если вам нужно узнать, сколько элементов в массиве, вам нужно отслеживать эту информацию отдельно.
Обработка массивов
C является источником серии изжоги.