Потому что вы не останавливаетесь, сравнивая number
символов.
Есть несколько способов сделать это, но я бы порекомендовал изменить условие вашего цикла на
while (*mystring1 && *mystring2 && *mystring1 == *mystring2 && number-- > 0)
Также удалить
if ((*mystring1 == mystring1[z]) && (*mystring2 == mystring2[z]))
{
break;
}
Потому что, хотя кажется, что это была ваша попытка остановить это, оно закодировано неправильно; вам все равно, если символы совпадают, вам важно только то, что вы сравнили number
символы. Также вы используете &&
, что делает условие еще более ограничительным, чем оно было.
Также изменить
*mystring1++;
*mystring2++;
К
mystring1++; // or better, ++mystring1
mystring2++; // or better, ++mystring2
*
разыменовывает указатель, но вы ничего не делаете с ним, так что это бессмысленно ( каламбур предназначен ).
Вы также можете удалить ++
из этих:
return (mystring1++ - mystring2++);
Так было бы
return mystring1 - mystring2;
Однако это неопределенное поведение, когда два указателя указывают на разные массивы (что они, вероятно, всегда будут). Вы должны делать что-то еще. Какие? Я не знаю, потому что я не знаю, что должна возвращать ваша функция.