2016-04-10 2 views
0

Так что я пытаюсь перегрузить оператор >>, но в этом случае я получаю строку с нулевым завершением. Как сделать, чтобы пользователь вводил достаточно символов, которые мои динамически выделяли char[] именовали данные и выделяли Это. Я знаю, что может быть способ, когда я делаю temp char[] с размером очень большой и использую цикл for, чтобы скопировать их, но я хочу сделать это, не делая очень большой char[]. У меня этот код сейчас, но я знаю, что это не работает из-за длины допускается в моем классе передается в.Перегрузка >> using istream

std::istream & operator>>(std::istream & is, String346 & objIn) { 
     using std::istream; 

     is >> objIn.data; 

     return is; 
    } 
+0

Вы можете получить символы по одному и проверить, что у вас достаточно места перед хранением –

ответ

2

C++ язык не содержит положений технически запретить пользователю «только ввода достаточно символов "для вашего массива char. Для вас могут быть доступны некоторые доступные для операционной системы ресурсы, такие как ограничение максимального количества символов в поле ввода текста, но это выходит за рамки C++.

При чтении с std::istream ваш код должен быть подготовлен для обработки и обработки ввода, который не соответствует вашим критериям. Выбросьте исключение, выйдите из программы после печати сообщения об ошибке или прочитайте до максимального количества символов, которые вы можете принять, и проигнорируйте лишнее - каким бы то ни было образом. Это полностью зависит от вас.

1

std::istream::get() имеет перегрузку, которая позволяет вам ограничить размер ввода. Тем не менее, вам все равно нужно иметь дело с остальными входами.

Смежные вопросы