Иногда очень полезно добавить printf, чтобы увидеть, что происходит. Например, если я добавлю:
do {
printf("palindrom[%d] = eingabe[%d]\n", j, i);
palindrom[j] = eingabe[i];
тогда вывод:
abcde
palindrom[0] = eingabe[5]
palindrom[1] = eingabe[4]
palindrom[2] = eingabe[3]
palindrom[3] = eingabe[2]
palindrom[4] = eingabe[1]
eingabe: "abcde"
palindrom: ""
Проблема сразу очевидна: индекс массива выключен на 1. Так как первый символ palindrom ([0]) устанавливается на последний символ eingabe ([5]), который равен «\ 0», то C видит его как пустую строку.
Это легко исправить, переместив --i в начало цикла:
do {
--i;
palindrom[j] = eingabe[i];
j++;
} while (i != 0);