Функция empty
может быть написана проще.
int empty( const char *s )
{
return *s == '\0';
}
Функция getHead
недействительна и не имеет смысла.Он выделяет память для одного символа, но пытается скопировать всю строку.И его вызов приводит к утечке памяти.
Вы можете просто написать
char getHead( const char *s )
{
return *s;
}
Функция getTail
также недопустима.Например, если строка, например, "A"
, функция выделяет память 0 байтов.В любом случае выделенная память не будет содержать строку.
Функция strcat
не может использоваться с объектом типа char или с нулевым указателем.
Кажется, чтоВы имеете в виду следующее.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char * ReverseStringHeadTail( const char *s )
{
if ( *s == '\0' ) return calloc( 1, 1 );
char tmp[2] = { *s, '\0' };
char *p = ReverseStringHeadTail( s + 1 );
p = realloc( p, strlen( p ) + sizeof( tmp ) );
return strcat( p, tmp );
}
int main(void)
{
const char *s = "12345";
puts( s );
char *p = ReverseStringHeadTail( s );
puts( p );
free( p );
return 0;
}
Вывод программы следующий:
12345
54321
Обратите внимание, что функция не проверяет, была ли память выделена успешно.