Почему strlen(NULL) вызывает ошибку во время компиляции, а мой собственный ft_strlen(NULL) аварийно завершает работу толC++

Программы на C++. Форум разработчиков
Anonymous
Почему strlen(NULL) вызывает ошибку во время компиляции, а мой собственный ft_strlen(NULL) аварийно завершает работу тол

Сообщение Anonymous »

Я пытаюсь переопределить стандартную функцию strlen в C и точно воспроизвожу ее поведение. Я определил свою функцию на основе стандартного объявления C для strlen:

Код: Выделить всё

size_t ft_strlen(const char *s);

и реализовал его правильно.
Однако я заметил нечто неожиданное:
Вызов strlen(NULL) вызывает ошибку времени компиляции:

нуль передается вызываемому объекту, которому требуется ненулевой аргумент [-Wnonnull]

Вызов ft_strlen(NULL) компилируется нормально, но завершается сбоем во время выполнения из-за

ошибки сегментации

Учитывая, что обе функции имеют одинаковую сигнатуру, передаются одни и те же входные данные и обе скомпилированы с cc, почему strlen(NULL) завершается неудачей компилировать, а ft_strlen(NULL) — нет?
Я пытаюсь понять поведение на уровне компилятора и то, чем стандартные библиотечные функции отличаются от пользовательских, и как я могу потенциально воспроизвести strlen() самостоятельно.
Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/797 ... strlennull

Вернуться в «C++»