Я создал функцию, которая сравнивает строки, и, как я расстроился из-за того, что всегда пропускал последний символ во второй строке и всегда возвращал «одинаковые строки» в результате, я заметил, что возился и использовал get ()вместо fgets () для второй строки. Я изменил это, и функция работает как положено.
Мой вопрос: почему функция gets () вычитает этот последний символ? Не должно ли это вычесть ноль и оставить все как есть?
Означает ли это, что, как новичок в C, я должен избегать использования gets () и сосредоточиться на fgets ()? Я начинаю думать о них так же, как я думаю о strcmp () vs strncmp ()
Спасибо за ваше время, все!
Примечание: я знаю, что я неМне действительно нужно (i == j) в конце, я просто оставил его там (может быть, дополнительная безопасность).
bool compare_string(const char *string1, const char *string2) {
int i = 0, j = 0, result = 0;
while (string1[i] != '\0') {
i++;
}
while (string2[j] != '\0') {
j++;
}
i = 0;
j = 0;
while ((string1[i] != '\0') && (string2[j] != '\0')) {
if (string1[i] < string2[j]) {
result = -1;
break;
} else if (string1[i] > string2[j]) {
result = 1;
break;
} else if (string1[i] == string2[j]) {
result = 0;
}
i++;
j++;
}
if ((result == 0) && (i==j)) {
printf("identical strings \n");
} else if (result == -1) {
printf("not identical, -1 \n");
} else if (result == 1) {
printf("not identical, 1 \n");
}
}
//in main
char str_compare1[STRING_LIMIT];
char str_compare2[STRING_LIMIT];
printf("enter 1st string to compare, (100) characters or less: \n");
fgets(str_compare1, STRING_LIMIT, stdin);
printf("enter 2nd string to compare, (100) characters or less \n");
fgets(str_compare2, STRING_LIMIT, stdin);
result = compare_string(str_compare1, str_compare2);