Страницы

Поиск по вопросам

четверг, 13 февраля 2020 г.

Старение кода

#cpp #функции


Здравствуйте. Компилятор майкрософт ругается на функцию itoa(), что она устарела,
хотя работает на всех компиляторах одинаково хорошо. Я знаю, что у неё есть аналог
под с99, но все же. Объясните причину этого предупреждения.    


Ответы

Ответ 1



Старые версии майкрософтовского компилятора C клали на стандарты, придуманные не Майкрософтом, большой-пребольшой прибор. В частности, считалось нормальным засорять пространство имён функциями, имена которых не соответствовали соглашению по именованию, принятому в соответствущем ISO. В стандарте функция, служащая для конвертации чисел в строки, называется _itoa(). Сейчас обе функции считаются устаревшими. Связано это с тем, что обе эти функции небезопасны, так как не проверяют размер буфера, выделенного для записи результата, что может привести к перезаписи данных, хранящихся за пределами этого буфера. На данный момент рекомендуется использовать более безопасный вариант функции _itoa_s, который принимает дополнительный параметр - размер буфера, и не позволяет записать в буфер больше данных, чем выдылено места. Если же вы используете не чистый C, а C++, то вы можете использовать sstream: #include ... int i = 5; std::sstream s; s << i; std::cout << s.str();

Комментариев нет:

Отправить комментарий