// TestLesson.cpp: определяет точку входа для консольного приложения.
//
#include "stdafx.h"
#include
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, который будем сам хранить этот размер для вас.
Комментариев нет:
Отправить комментарий