Почему 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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