Предварительным условием strlen
является то, что аргумент указывает на массив с нулевым символом в конце (символьная строка). Ваш массив не заканчивается нулем, поэтому вы нарушаете это предварительное условие, передавая (указатель) этот массив в strlen
.
Поведение программы, которая нарушает предварительное условие стандартной функции, не определено.
Как мне вернуть размер массива char с помощью функции в c ++?
Вы можете получить размер массива, используя шаблон:
template <class T, std::size_t N>
std::size_t
size(const T (&array)[N])
{
return N;
}
Использование:
char a[7] = {'a', 'b', 'c','d', 'c', 'b', 'a'};
cout<<"size is: "<<size(a)<<endl;
Обратите внимание, что вам не нужно писать этот шаблон самостоятельно, поскольку стандартная библиотека уже предоставляет его для вас. Он называется std::size
(введен в C ++ 17).