Созданный массив не содержит строку, поскольку в массиве нет завершающего нуля.
Также нет необходимости определять вспомогательный массив для определения, является ли переданная строка палиндромом.
Создание массива переменной длины внутри функции небезопасно и может привести к переполнению стека. Помимо этого пользователь функции может передать функции второй аргумент, меньший или равный 0. В этом случае функция будет иметь неопределенное поведение.
Функция должна делать только одно, то есть определить, переданная строка является палиндромом.
Вызывающая функция решает, какое сообщение выводить, если оно есть.
Параметр функции, который указывает массив, должен иметь квалификатор const
поскольку переданная строка не изменяется в функции.
Функция может быть определена следующим образом
int isPal ( const char *s )
{
size_t n = strlen( s );
size_t i = 0;
while ( i < n / 2 && s[i] == s[n-i-1] ) ++i;
return i == n / 2;
}
Вот демонстрационная программа.
#include <stdio.h>
#include <string.h>
int isPal ( const char *s )
{
size_t n = strlen( s );
size_t i = 0;
while ( i < n / 2 && s[i] == s[n-i-1] ) ++i;
return i == n / 2;
}
int main(void)
{
const char *s = "123454321";
printf( "The string \"%s\" is %sa palindrome.\n",
s, isPal( s ) ? "" : "not " );
return 0;
}
Его выход составляет
The string "123454321" is a palindrome.