Использую следующий код:
int mret;
char buffer[2048];
string response;
mret = recv(s, buffer, sizeof(buffer), 0);
response = string(buffer);
fill_n(buffer, sizeof(buffer), NULL);
При этом все объявления делаю за пределами функции. Однако, если перенести их внутрь функции (что мне сейчас и нужно), то происходит не приятная ситуация:
responce
вместо того, что бы подстроить свой size
автоматически, равным размерам текста из buffer
(допустим 200), ставит size
равным 2058, заполняя остальное пространство знаками вопроса ?
.
Почему это произошло и как этого избежать? Объявление обязательно должно быть внутри функции.
Если string
является ::std::string
, то конструктор будет принимать на вход оканчивающуюся нулем строку, а вы ей передаете буфер потенциально полностью забитый мусором. Инициализация вне функции видимо работает так как глобальные переменные всегда инициализируются нулями. Соответственно перед присваиванием надо проверить результат вызова recv
и поместить в строку именно полученное количество байт:
if((0 < mret) && (mret <= sizeof(buffer))
{
response.assign(buffer, static_cast<size_t>(mret));
}
else
{
// обработка ошибок...
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Здравствуйте, подскажите, пожалуйста, как установить Parallel STL на Ubuntu 1604 пробовал по инструкциям от сюда https://software