Ничто в стандартном C не отслеживает какого-либо различия между значениями элементов, установленных при инициализации по умолчанию, и значениями, заданными явно программой, и ничего в стандартных C-компонентах не отслеживает, какие элементы были заданы программой явно. Единственный способ для программы обнаружить последний элемент массива, которому она присвоила значение, - сохранить всю необходимую для этого информацию.
Один из способов сделать это - запомнить индекс последнего элемента, которому было присвоено значение.
Другой способ сделать это - инициализировать все элементы массива значением, которое не используется для каких-либо других целей. Затем содержимое массива можно исследовать, чтобы увидеть, каким является последний элемент без этого значения маркера.
Существуют и другие способы, но все они связаны с тем, что программа поддерживает свою собственную информацию. C не предоставляет никаких таких услуг.