В ответах на вопрос Чтение строки и ее сравнение C несколько человек не одобряли использование strcmp()
, говоря что-то вроде
Я также настоятельно рекомендую вам привыкнуть к использованию strncmp() сейчас, ... чтобы избежать многих проблем в будущем.
или (в Почему сравнение строк не удается?)
Убедитесь, что вы используете strncmp, а не strcmp. strcmp крайне небезопасен.
О каких проблемах они говорят?
Причина scanf()
со строковыми спецификаторами и gets()
настоятельно не рекомендуется, потому что они почти неизбежно приводят к уязвимостям переполнения буфера. Однако невозможно переполнить буфер с помощью strcmp()
, верно?
«Переполнение буфера или переполнение буфера — это аномалия, при которой программа при записи данных в буфер выходит за пределы буфера и перезаписывает соседнюю память».
( -- Википедия: переполнение буфера).
Поскольку функция strcmp() никогда не записывает ни в какой буфер, функция strcmp() не может вызвать переполнение буфера, верно?
По какой причине люди не одобряют использование strcmp()
и вместо этого рекомендуют strncmp()
?
strncmp()
не лучше (или хуже), чемstrcmp()
. - person P.P   schedule 22.06.2014strncmp
для защиты от строк, которые не завершаются нулем, просто устраняет основную проблему, заключающуюся в том, что у вас есть незавершенная строка. Это просто испортит следующую функцию, которая предполагает, что она завершается нулем. - person Schwern   schedule 27.03.2017