У вас переполнение буфера. removeChar
неявно предполагает, что str2
имеет ту же длину, что и str1
. Поэтому, когда вы запустите это:
for (int i = 0; i <= length; i++){
if (str1[i] == c){
str2[i] = '*';
}
else {
str2[i] = str1[i];
}
}
с str1
, являющимся "cameron"
и str2
, являющимся "mah"
, вы go выйдете за границы str2
и в память, где palindrome
хранится. Таким образом, после запуска removeChar(string, string2, 'm');
, char[]
, который раньше содержал mah\0
, теперь содержит ca*e
, а char[]
, который раньше содержал madam\0
, теперь ron\0m\0
. Очевидно, "ron"
не является палиндромом. Попробуйте напечатать значения ваших строк после removeChar(string, string2, 'm');
, и вы должны увидеть это в действии.
Единственная причина, по которой вам вообще разрешено делать это без ошибки сегментации, заключается в том, что вы используете char[]
вместо char*
, кстати. Вы можете предпочесть использовать указатели над массивами, чтобы такие вещи не прерывались молча.