не удается сохранить возвращаемое значение strlen

StackOverflow https://stackoverflow.com/questions/6370471

  •  28-10-2019
  •  | 
  •  

Вопрос

Я использую функцию strlen библиотеки строк c. Я передал значение NULL строка к нему и обнаружил загадочный результат. Я знаю, что я не должен передавать NULL строку, но мне нужно объяснение для этого. Код выглядит примерно так

родовое слово

В моем компиляторе gcc он отлично работает с комментарием. но если вы удалите комментарий в строке k=strlen(s);

он вызывает ошибку сегментации. Есть объяснения?

Это было полезно?

Решение

Это код ассемблера без присвоения переменной int

родовое слово

компилятор не вызывает _strlen, потому что значение не будет использоваться

Другие советы

Первый вызов strlen, который не присваивает возвращаемое значение, вероятно, оптимизирован вашим компилятором.

Передача нулевого указателя на strlen приводит к неопределенному поведению . Может случиться что угодно , включая ошибки сегментации.И в том числе без ошибок сегментации.

Если вы хотите узнать точную причину, вам нужно будет взглянуть на код ассемблера, который генерирует ваш компилятор.Но ничего полезного это вам не скажет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top