По определению, возвращаемое значение strncmp
равно нулю для двух одинаковых по регистру и длине строк.
Глядя на код вашей сборки, строка:
test %eax,%eax
не является частью функции strncmp
.
Используя отладчик, установите точку останова в этой инструкции. Проверьте регистр EAX
, он должен быть равен нулю (в зависимости от того, возвращает ли функция strncmp
свой результат в регистре EAX
).
Инструкция по сборке test
установит коды условий в зависимости от значения параметров. Популярный бит кода состояния - это бит ноль , указывающий, что выражение равно нулю. Следующая инструкция может быть скачком , если код условия равен нулю .
Если вы используете результат функции strncmp
в математическом выражении или выражении, компилятор может сгенерировать другой код.
Попробуйте этот фрагмент:
volatile int result = 0x55;
volatile int a_value = 3;
result = (strncmp("Hausaufgaben", "Hausaufgaben", 256) + 27) / 3;
printf("Result is: %d\n", result);
Есть ли причина, по которой вам нужен компилятор для сохранения значения из strncmp
?
Есть ли причина, по которой вам нужен компилятор для сравнения значения с постоянным числовым нулем?