Почему функция length() определяет длину строки правильно,только 1 раз?
У вас в коде функция max5 требует на вход массив строк. Вы в нее передаете указатель на отдельностящую строку a и делаете вид, что это начало массива строк. Указатель на строку a не является началом никакого массива. Это просто указатель на самостоятельную строку a. Любые попытки доступа к элементам такого массива arr внутри max5 (кроме arr[0]) попадают "в никуда". Потому вы и получаете чушь из arr[1] и arr[2].
Определитесь, что же должна получать ваша функция max5 - массив строк или массив указателей на строки и далее действуйте соответствующим образом. Сейчас она требует массив строк. Вот и заводите и передавайте массив строк. К чему вы заводили этот массив указателей mas в функции main - не ясно.
Спасибо за помощь,вод измененный код,который выводит все правильно. Я используют Visual Studia 2019.Довольно странно,что он скомпилировался без ошибки.
#include <iostream>
using namespace std;
#include <string>
int max5(string* arr[],int);
int main()
{
string a, b, c;
getline(cin,a);
getline(cin, b);
getline(cin, c);
string *mas[3] = { &a,&b,&c };
int kk=max5(mas, 3);
cout << kk;
return 0;
}
int max5(string *arr[],int lol) {
int z = 0;
for (int i = 0; i < lol; i++) {
if (z<arr[i]->length()) z=arr[i]->length();
cout << "arr" << i << "=" << arr[i]->length() << endl;
}
return z;
}
Сборка персонального компьютера от Artline: умный выбор для современных пользователей