Как вернуть размер массива char с помощью функции в c ++? - PullRequest
0 голосов
/ 23 апреля 2019
void printsize(const char arr[]){
    cout<<"size is: "<<strlen(arr)<<endl;



}    
main(){

    char a[7] = {'a', 'b', 'c','d', 'c', 'b', 'a'};
    printsize(a)

    return 0
}

Вот что он выведет: размер 11

Нет нигде массива 11. Что я должен сделать, чтобы заставить функцию выводить правильный размер, который равен 7? Я не хочу устанавливать цикл for.

Ответы [ 2 ]

5 голосов
/ 23 апреля 2019

Предварительным условием 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).

5 голосов
/ 23 апреля 2019

Вы не можете.Просто из const char arr[] как бы узнать размер массива?Обходной путь может иметь значение дозорного.В случае strlen это значение часового шкалы равно '\0' в конце строки.Добавьте его в свой массив:

char a[8] = { 'a', 'b', 'c','d', 'c', 'b', 'a', '\0' };

Кроме того, a не существует в функции, вы, вероятно, намеревались использовать вместо arr:

std::cout << "size is: " << strlen(arr) << std::endl;

Это дает ваможидаемый результат 7.На заметку, вы всегда должны объявлять вашу функцию main как int main.Неявный int не рекомендуется и нестандартен, не все компиляторы поддерживают его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...