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.