Q:

Função para inverter strings em C

Insere a string orig no início da string dest, retornando dest.
char *strins(char *dest, char *orig)
Meu código ficou o seguinte:
char *strins(char *dest, char *orig)
{
    return strcat(*orig,*dest);
}

main()
{
    char s[] = "World";
    strins(s, "Hello");
    printf(s);
}

A função deve funcionar assim:
char s[100] = "Autonoma";
strins(s, "Universidade");
printf(s);  ->  UniversidadeAutonoma

A:

Tem diversos problemas em seu código.
Primeiramente, quando você define uma string literal com char s[] = "World"; você está alocando apenas o espaço na memória necessário para aquele número específico de caracteres.
Como você quer juntar duas strings, o tamanho vai aumentar, precisando então de mais espaço. Isso se resolve por exemplo definindo um tamanho máximo com  char s[100] = "World";.
Além disso você não pode modificar um string literal, então você não pode fazer a função da forma que você fez e esperar que funcione com strins(s, "Hello");
visto que ele não vai conseguir modificar a string literal "Hello".
Por último, o resultado da função strcat é salvo no primeiro parâmetro, então estaria sendo salvo no orig ao invés de dest como desejado. Um strcpy vai bastar, embora vá deixar a variável de origem "suja", o que não sei se é um problema.
Segue o código com os problemas sugeridos corrigidos:
#include <stdio.h>
#include <string.h>
char *strins(char *dest, char *orig)
{

    strcat(orig,dest);
    strcpy(dest,orig);
    return dest;
}

int main()
{
    char s[100] = "World";
    char outro[100]= "Hello";
    strins(s,outro);
    printf("%s\n",s);
    return 0;
}

Que retorna o resultado:
HelloWorld

