Я обеспокоен переполнением буфера, и мне нужно извлечь некоторые символы из класса, производного от std :: istream.Из того, что я понимаю, нет способа передать поток в std :: string непосредственно из istream, без моего собственного >> оператора.Поэтому я подумал о том, чтобы передать содержимое в массив char, а затем поместить его в std :: string.Вот простой пример:
char CharArray[1000] = {0};
SomeIStream >> CharArray;
std::string StuffFromStream(CharArray);
Однако, похоже, нет никакого способа узнать, что CharArray не будет переполнен.Есть ли какой-то максимум, который оператор извлечения потока будет записывать в chararray?Есть ли способ проверить, сколько будет извлечено превентивно?Это просто неправильно? Есть ли способ, который намного лучше, чем этот?
Edit1: я исправил не утечку памяти.Нет необходимости звонить удалить.Я не могу поверить, что я это сделал.
Edit2: было предложено использовать >> непосредственно в строку.Я пытался, что предыдущая в кодовой базе эта проблема возникла, и она не удалась.Сказать, что не найдено подходящего соответствия для оператора.Затем я попытался с std :: fstream, и это снова не удалось.Попытка кода std :: fstream в простом минималистичном проекте увенчалась успехом.Это говорит мне о том, что с моим большим проектом что-то не так.Первоначальная цель этого вопроса больше не действительна.
Edit3: я решил это.Я попытался выполнить потоковую передачу на строку typedef String, которая, на мой взгляд, была и std :: string, но на самом деле это была const std :: String.Естественно, нет оператора извлечения потока для записи в недоступный для записи объект, поэтому он просто дал мне все операторы, перечисленные в заголовке istream (тот, который мне нужен был в заголовке строки).
Благодарялюди, которые указали на мое ошибочное исследование и указали мне правильное направление.