Вы, кажется, пишете смесь C и C ++, но ваше назначение требует строки C. Я бы написал так:
char str[] = "Thomas";
size_t head = 0;
size_t tail = strlen(str)-1;
while (head<tail)
{
char tmp = str[head];
str[head] = str[tail];
str[tail] = tmp;
head++;
tail--;
}
Вы можете написать этот алгоритм с меньшим количеством переменных, но я лично считаю, что эту версию легче читать, понимать и проверять.
Если вы предпочитаете использовать указатели, а не индексы, то это выглядит так:
char str[] = "Thomas";
char *head = str;
char *tail = str + strlen(str) - 1;
while (head<tail)
{
char tmp = *head;
*head = *tail;
*tail = tmp;
head++;
tail--;
}
Две версии практически неразличимы.