As variáveis da pilha de execução, são automaticamentes desalocadas quando a mesma retorna. No caso do exemplo a seguir, o retorno da função teste() é o endereço de memória da string “Teste123” (ou seja, para onde str aponta e não str propriamente dito).
char *teste(void)
{
char *str = "Teste123";
return str;
}
Esta string está alocada na seção de dados do programa e existirá durante toda sua execução, não se restringindo ao escopo da pilha, o que torna segura sua utilização.
Vale lembrar que esta string é protegida somente para leitura, qualquer tentativa de escrita em uma de suas posições, fatalmente irá gerar uma falha de segmentação.





Para isto o interessante e utilizar const char* ao inves de char* em situações deste genero!