C - Те, що strcmp() точно повертається до C

Я написав цей код у C:

Чи повинна консоль друкувати значення 1 або різницю між значеннями символів ASCII o і \0 , тобто. 111? На цьому сайті написано, що це має видавати put 111, але коли я запускаю його на своєму ноутбуці, він показує 1. Чому?

Негативне значення, якщо lhs з'являється перед rhs у лексикографічному порядку.

Нуль, якщо lhs і rhs порівнюються рівними.

Позитивне значення, якщо lhs з'являється після rhs у лексикографічному порядку.

Як ви можете бачити, це просто говорить негативний, нульовий чи позитивний. Ви не можете розраховувати ні на що інше.

Пов'язаний із вами сайт не є неправильним. Він повідомляє вам, що значення, що повертається , == 0 або > 0 і воно дає приклад і показує його висновок. Він не каже, що висновок має бути 111 .

Щоб процитувати сторінку керівництва:

Функції strcmp() і strncmp() повертають ціле число, менше, рівне або більше нуля, якщо s1 (або перші n байтів) знайдено відповідно, щоб бути менше, відповідати або бути більше s2.

Іншими словами, ви ніколи не повинні покладатися на точне значення strcmp (крім 0 , звичайно). Єдина гарантія полягає в тому, що значення, що повертається, буде негативним, якщо перший рядок "менше", позитивна, якщо перший рядок "більше" або 0, якщо вони рівні. Ті самі входи можуть генерувати різні результати на різних платформах з різними реалізаціями strcmp.