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 шт):

Автор решения: Harry

Из соображений безопасности эта возможность удалена, как и gets из С.

Используйте getline с обязательной передачей размера принимающего буфера.

→ Ссылка
Автор решения: user7860670

В вашем примере нет никаких массивов char, аргумент c имеет тип указатель на char. Массивы в С++ нельзя передать по значению, можно только по ссылке или по указателю. Ну а ошибка в том, что из стандарта убрали небезопасную перегрузку оператора >>, принимающую указатель на первый элемента массива неизвестного размера. Используйте std::string или передавайте массив по ссылке void CC(char ( & c )[20]) или так void CC(::std::array<char, 20> & c)

→ Ссылка