Почему если записать c_str() (из возвращаемой string ) в массив const char * arr[1] то в массиве не оказывается строки?

Почему если записать c_str() (из возвращаемой string ) в элемент массива const char * arr[1] то в элементе массива не окажется строки? Но если раскомментировать строку uncomment me то все будет работать как ожидается

string func(){ return string{"hello!"};}

int main() {

    const char * arr[1];
   // cout<<"func().c_str(): "<<func().c_str()<<endl; //uncomment me 
    arr[0] = func().c_str();
    
    cout<<"arr[0]: "<<arr[0]<<endl; //expected hello!

}

Output: arr[0]:


Ответы (1 шт):

Автор решения: Harry

Время жизни возвращаемой строки к моменту вывода закончилось, и она уничтожена...

Попробуйте так:

string tmp = func();
arr[0] = tmp.c_str();

cout<<"arr[0]: "<<arr[0]<<endl; //expected hello!
→ Ссылка