Como ya te han dicho antes, en c no hay tipo de datos string, luego solo queda trabajar con arreglos de chars (lo que viene siendo la propia imp!ementacion del tipo string). Ahora, si intentas devolver una variable local en una funcion los datos retornados seran inconsistentes e impredecibles ya que dicha variable local al salir de su ambito (funcion) sera eliminada del stack. Para lograr lo que quieres tienes un par de opciones:
1- Creas la variable en la funcion padre y la pasas como parametro por referencia
2- Usas variables globales, estáticas o memoria dinamica (como dijeron antes tienes que estar seguro de eliminarla cuando no la necesites)
3- Haces una copia de la variable retornada justo al salir de la funcion:
Si es una cadena puedes usar strcpy, strncpy, etc. Para cualquier otro tipo de datos memcpy, copy, etc
char mystr[MAX_PATH];
char *ptr = MyFunction();
if(ptr != null)
// evita bof
strncpy(mystr, ptr, sizeof(mystr));
BONUS- Si trabajar estrictamente con char* no es un requisito entonces usa std::string al retornar de la funcion:std::string mystr = MyFunction();
Saludos