Страницы

Поиск по вопросам

среда, 12 декабря 2018 г.

Ошибка в определении количество элементов массива в C++

// TestLesson.cpp: определяет точку входа для консольного приложения. //
#include "stdafx.h" #include #include using namespace std;
int main() { setlocale(LC_ALL, "rus"); int* size = new int; cin >> *size; cout << "Элементы массива: | "; char* arrayChar = new char[*size]; for (int k = 0; k < *size; k++) { arrayChar[k] = 'a' + k; cout << arrayChar[k] << " | "; } cout << endl; cout << strlen(arrayChar); system("pause>nul"); return 0; }
Почему метод srtlen() выводит отве больше, чем реально заданных (заданных при объявлении)? И при чем не имеер значение какой массив: статический или динамический. Я использую Microsoft Visual Studio 2017


Ответ

Функция strlen предназначена для определения длин С-строк. Аргументом функции strlen может быть только указатель на начало С-строки. В противном случае поведение не определено.
С-строкой называется последовательность символов типа char, завершающаяся символом '\0'. У вас в коде эти требования соблюдены? Нет. Поэтому применение функции strlen в вашем коде вызывает неопределенное поведение. Что вы и наблюдаете.
К "определению количества элементов массива", упомянутому в заголовке вашего вопроса, функция strlen никакого отношения не имеет. Более того, в С++ нет встроенных средств для определению количества элементов массива, выделенного через new [].
В вашем коде вы и так знаете размер вашего массива - это *size. Тщательно берегите этот размер и пользуйтесь им везде, где он вам нужен. Разумеется, вместо "голого" массива вы можете воспользоваться std::vector, который будем сам хранить этот размер для вас.

Комментариев нет:

Отправить комментарий