Весь язык Си написан под девизом: «Мы будем вести себя правильно, если программист знает, что он делает». Предполагается, что программист знает, как выполнить все необходимые ему проверки. Это не просто проверка на NULL, это гарантия того, что dest
указывает на достаточное количество выделенной памяти для хранения src
, это проверка возвращаемого значения fopen
, чтобы убедиться, что файл действительно действительно открылся успешно, зная когда memcpy
безопасно и когда требуется memmove
и т. д.
Получение strcpy
для проверки на NULL не изменит языковой парадигмы. Вам все равно нужно будет убедиться, что dest
указывает на достаточно места - и это то, что strcpy
не может проверить без изменения интерфейса. Вам также необходимо убедиться, что src
определен '\0'
, что опять-таки strcpy
не может проверить.
Существуют некоторые стандартные библиотечные функции C, которые do проверяют на NULL: например, free(NULL)
всегда безопасен. Но в целом С ожидает, что вы будете знать, что делаете.
[C ++ обычно отказывается от библиотеки <cstring>
в пользу std::string
и друзей.]