¿Por qué mi función está devolviendo basura cuando debería devolver un char?

Soy un novato en C ++ aprendiendo el idioma y jugando. Escribí un trozo de código cuyo comportamiento no entiendo. Alguien podría explicar por qué el siguiente código imprime basura aleatoria y no el primer carácter de la primera cadena de la lista (es decir,a).

#include <iostream>
#include <vector>
#include <string>
#include <cstdlib>
#include <ctime>
#include <climits>
#include <stdio.h>


char* str2char(std::string str)
{
    char cset[str.size()+1]; // +1 for the null character
    for(int i = 0; i < str.size(); i++)
    {
        cset[i] = str[i];
    }
    cset[str.size()] = '\0';
    return cset;
}

int main (int argc, char * const argv[]) {



    std::vector< std::string > ladontakadet;
    ladontakadet.push_back("aabcbbca");
    ladontakadet.push_back("abcdabcd");
    ladontakadet.push_back("cbbdcdaa");
    ladontakadet.push_back("aadcbdca");
    ladontakadet.push_back("cccbaaab");
    ladontakadet.push_back("dabccbaa");
    ladontakadet.push_back("ccbdcbad");
    ladontakadet.push_back("bdcbccad");
    ladontakadet.push_back("ddcadccb");
    ladontakadet.push_back("baccddaa");

    std::string v = ladontakadet.at(0);
    char *r;
    r = str2char(v);
    std::cout << r[0] << std::endl;
    return 0;
}

¿Por qué mi basura está regresando, cuando estoy esperando que salga?a?

Gracias por cualquier ayuda!

PD La salida de este código es aleatoria. No siempre imprime el mismo carácter ...: S

Respuestas a la pregunta(3)

Su respuesta a la pregunta