¿Cuál es la diferencia entre devolver un char * y un char [] de una función? [duplicar

Esta pregunta ya tiene una respuesta aquí:

¿Cómo acceder a una variable local desde una función diferente utilizando punteros? 9 respuestas Literales de cadena: ¿A dónde van? 8 respuestas ¿Cuál es la diferencia entre char s [] y char * s? 12 respuestas

Por qué la primera función devuelve la cadena "Hola, Mundo" pero la segunda función no devuelve nada. Pensé que el valor de retorno de ambas funciones no estaría definido ya que están devolviendo datos que están fuera del alcance.

#include <stdio.h>
// This successfully returns "Hello, World"
char* function1()
{
    char* string = "Hello, World!";
    return string;
}
// This returns nothing
char* function2()
{
    char string[] = "Hello, World!";
    return string; 
}

int main()
{
    char* foo1 = function1();
    printf("%s\n", foo1); // Prints "Hello, World"
    printf("------------\n");
    char* foo2 = function2(); // Prints nothing
    printf("%s\n", foo2);
    return 0;
}

Respuestas a la pregunta(6)

Su respuesta a la pregunta