Разница в том, что неинициализированные локальные переменные имеют неопределенные значения.
Когда вы читаете из wordReverse
,
strcmp(wordReverse, word)
strcmp
принимает две строки, то есть ожидает где-нибудь найти терминатор NUL.
Ваш цикл, который заполняет wordReverse
, не завершает его, поэтому вы получаете здесь неопределенное поведение.
Fix:
wordReverse[revCount] = '\0';
после цикла.
Версия, которая инициализирует wordReverse
как
char wordReverse[25] = "";
работает, потому что он эквивалентен char wordReverse[25] = { '\0' }
, который устанавливает первый элемент на '\0'
явно, а все остальные элементы на '\0'
неявно.
Примечание:
if (X) return true;
return false;
эквивалентно
return !!X; // Returns 1 if and only if X is not 0, and 0 otherwise