Падение при возврате из функции const char*
Имеется данный код
const char* get_msg(){
const char str[] = "get_msg";
return str;
}
#include <stdio.h>
int main(){
printf("%s\n", get_msg());
}
При компиляции выдается
warning: function returns address of local variable [-Wreturn-local-addr]
и естественно при выполнении приложение крашится. Я понимаю почему это происходит, ведь строка была на стеке и он уничтожается после того как функция вернула значение.
Однако если функцию переписать так
const char* get_msg(){
return "get_msg";
}
То нет ни варнингов ни падения. Меня интересует, как работает return "get_msg"; ? Получается эта строка находится на стеке? Или где? Ведь эта строка по логике должна "исчезать" после возврата функции.
Компилирую так: gcc main.c -o main