C++20. Массив char как параметр в процедуре при заполнении через cin выдаёт ошибку
Со стандартами C++14 и C++17 такой ошибки нет. Ошибка появилась с C++20. Оно не хочет вводить массив переданный в качестве параметра через cin. Что не так. Оно жалуется на ">>" в "cin >> c;". Ошибка: "отсутствует оператор ">>", соответствующий этим операндам" Процедура:
void CC(char c[])
{
cin >> c;
}
Visual Studio с Локальным отладчиком Windows (Стандарт ISO C++ 20 (/std:c++20)). Что делать?
Ответы (2 шт):
Из соображений безопасности эта возможность удалена, как и gets
из С.
Используйте getline
с обязательной передачей размера принимающего буфера.
В вашем примере нет никаких массивов char
, аргумент c
имеет тип указатель на char
. Массивы в С++ нельзя передать по значению, можно только по ссылке или по указателю. Ну а ошибка в том, что из стандарта убрали небезопасную перегрузку оператора >>
, принимающую указатель на первый элемента массива неизвестного размера. Используйте std::string
или передавайте массив по ссылке void CC(char ( & c )[20])
или так void CC(::std::array<char, 20> & c)