Для начала это объявление функции
void reverse(char *rTarget[]);
эквивалентно
void reverse(char **rTarget);
Нет большого смысла объявлять его таким образом.
Вы должны объявитьфункция типа
void reverse( char rTarget[] );
и вызов ее как
reverse( memes );
Определение функции также неверно. По крайней мере, вы должны использовать цикл вроде
for (int i = 0; i < length / 2; i++)
, и эти выражения
swap = *rTarget[i];
*rTarget[i] = *rTarget[length - i];
*rTarget[length - i] = swap;
недопустимы. Они должны быть переписаны как
swap = ( *rTarget )[i];
( *rTarget )[i] = ( *rTarget )[length - i -1];
( *rTarget )[length - i - 1] = swap;
Также переменная length
должна иметь тип size_t
, потому что в общем случае объект типа int не может вместить объект типа size_t и функцию strlen
иметь тип возврата size_t
. Таким образом, вы должны заменить это объявление
int length = (int) strlen(*rTarget);
Для этого объявления
size_t length = strlen(*rTarget);
Обратите внимание на то, что в соответствии с соглашениями для стандартных строковых функций C функция должна возвращать указатель на обратную строку.
И согласно стандарту C функция main без параметров должна быть объявлена как
int main( void )
Вот демонстрационная программа, которая показывает, как функция может быть объявлена и определена
#include <stdio.h>
#include <string.h>
char * reverse( char *s )
{
for ( size_t i = 0, n = strlen( s ); i < n / 2; i++ )
{
char c = s[i];
s[i] = s[n-i-1];
s[n-i-1] = c;
}
return s;
}
int main(void)
{
char memes[] = "memes";
puts( reverse( memes ) );
return 0;
}
Вывод программы
semem