Если вам передают массив символов, в котором могут быть или не быть данные с нулевым символом в конце, на самом деле нет хорошего способа проверки.Лучшее, что вы можете сделать, - это найти нулевой символ до определенной длины (не бесконечно!).Но 0 - это не совсем необычный байт данных, который можно найти в неинициализированной области памяти.
Это одна из многих особенностей стандартного строкового стандарта Си, которая не нравится многим.Поиск длины строки, которую клиент передает вам, - это в лучшем случае операция поиска O (n), а в худшем случае ошибка сегментации.
Другая проблема, конечно, заключается в том, что массивы и указатели являются взаимозаменяемыми.Это означает, что array_name + 2
соответствует &(array_name[2])
, а sizeof(a)
равно sizeof(char*)
, а не длине массива.