Необходимо из потока считать массив символов, количество которых я не узнаю, пока не завершу считывание.
Я сделал такой финт ушами:
unsigned short int size = -1;
char mark = '#';
char *str = new char [0];
stream.getline(str, size, mark);
В данный момент этот код работает правильно, однако я не уверен, будет ли он всегда так работать? Или это всё-таки неопределённое поведение? Если так делать нельзя, то как стоит поступить в данной ситуации?
Создавать массив размером
size
не хочется: такое число выбрано просто, как нечто большое.
Ещё один вариант решения, который я вижу: считать сначала все символы без сохранения, получить
stream.gcount()
, сбросить итератор, объявить массив нужного размера и повторить считывание. Но мне этот способ не нравится, так как символов может быть прочитано действительно много, и в качестве входного потока будет файл на жёстком диске.