не удается сохранить возвращаемое значение strlen
-
28-10-2019 - |
Вопрос
Я использую функцию strlen библиотеки строк c. Я передал значение NULL строка к нему и обнаружил загадочный результат. Я знаю, что я не должен передавать NULL строку, но мне нужно объяснение для этого. Код выглядит примерно так
родовое слово В моем компиляторе gcc он отлично работает с комментарием.
но если вы удалите комментарий в строке
k=strlen(s);
он вызывает ошибку сегментации. Есть объяснения?
Решение
Это код ассемблера без присвоения переменной int
родовое словокомпилятор не вызывает _strlen, потому что значение не будет использоваться
Другие советы
Первый вызов strlen, который не присваивает возвращаемое значение, вероятно, оптимизирован вашим компилятором.
Передача нулевого указателя на strlen
приводит к неопределенному поведению . Может случиться что угодно , включая ошибки сегментации.И в том числе без ошибок сегментации.
Если вы хотите узнать точную причину, вам нужно будет взглянуть на код ассемблера, который генерирует ваш компилятор.Но ничего полезного это вам не скажет.