Я пишу программу для имитации strcmp (). Это мой код.
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define MAX 100
int strcmp(const char *str1, const char *str2);
char s1[MAX], s2[MAX];
int main()
{
printf("Compare two user entered strings character by character.\n");
printf("Enter string one: ");
fgets(s1, MAX, stdin);
printf("Enter string two: ");
fgets(s2, MAX, stdin);
printf("The user entered string one is: %s", s1);
printf("The user entered string two is: %s", s2);
printf("The value returned by strcmp() is: %d", strcmp(s1, s2));
return 0;
}
int strcmp(const char *str1, const char *str2){
int result;
while(*str1 != '\0' && *str1 - *str2 == 0){
str1++;
str2++;
}
if(*str1 - *str2 != '\0'){
printf("%d\n", *str1);
printf("%d\n", *str2);
result = *str1 - *str2;
}else if(*str1 == '\0' && *str2 == '\0'){
result = 0;
}
return result;
}
По большей части он работает нормально, и функция strcmp () возвращает правильные результаты, за исключением случаев, когда одна строка завершается, а у другой остаются символы. Я использую while l oop для сравнения символов и увеличения указателей на следующий символ. Когда строка увеличивается до '\ 0', целочисленное значение, отображаемое при выполнении printf, равно 10. Почему это не 0? Поскольку значение равно 10, вычет из него символа других строк дает результат, который больше на 10.
Почему это происходит?