Существует разница между небезопасным и устаревшим . atoi()
небезопасно, однако gcc не скажет вам прекратить его использование, потому что это опасно. Использование gets () дает другой результат :) YCMV (ваш компилятор может отличаться).
В общем, если функция может выйти из строя и проверка ошибок невозможна, не используйте ее. Если функция позволяет записывать в область памяти без возможности превышать ограничение по размеру, не используйте ее.
Последнее легче определить только по прототипу функции. Однако, если вы в некоторой степени осознаете, что делаете, вы быстро поймете, что у вас нет возможности узнать, действительно ли то, что вы получили из atoi()
, было строковым представлением результата, который пользователь только что ввел в командную строку .
Это обоснование вовсе не исключает стандартную библиотеку C. Вы столкнетесь с большим и большим количеством библиотечного кода, и некоторые из них хороши. Никакой список не может заменить усвоенные навыки защитного кодирования.