Самой большой проблемой в ISO C90 и C99 является, вероятно, gets
, которая подвержена переполнению буфера. Фактически, он, кажется, был удален из нового стандарта C11.
Функция ISO C для получения временного файла, tmpnam
, уязвима для условий гонки на многопользовательских платформах. Стандарт POSIX определяет функцию mkstemp
, что является более безопасным.
Кроме того, многие из строковых функций, таких как strchr
, не являются безопасными по типу; они берут const char*
, но возвращают char*
в тот же буфер, поэтому, используя их, вы можете неявно лить const
. Однако избегать этого - вопрос тщательного программирования; строковые функции не являются по своей сути небезопасными в способе, которым являются gets
и tmpnam
.
Наконец, многие функции, такие как strcpy
, strcat
и sprintf
делать никаких ограничений не проверяя, но так как они не имеют дело с внешним входом, как gets
делает, они могут использоваться безопасным образом. snprintf
- более безопасная альтернатива sprintf
с C99.
Отсутствует код ошибки; есть только багги, которые пишут код. –
Одна проблема - это, как я помню, некорректная некорректность некоторых строковых функций, взятие константной строки и возвращающая указатель на неконстантную. Проверь это. –
Какие источники это? И говорят ли они о * дизайне * стандартной библиотеки или конкретной * реализации * стандартной библиотеки? –