为什么我的函数在返回char时会返回垃圾?

jje*_*omi 3 c++ arrays string pointers char

我是C++的新手学习语言和玩耍.我写了一段我不理解的行为代码.有人可以解释为什么下面的代码打印出随机垃圾而不是列表中第一个字符串的第一个字符(即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;
}
Run Code Online (Sandbox Code Playgroud)

当我期待它输出时,为什么我的回收垃圾a

Thnx任何帮助!

PS此代码的输出是随机的.它并不总是打印相同的字符..:S

Som*_*ude 12

这是因为你返回一个指向局部变量的指针,一个局部变量在函数返回时超出范围.

您已经在使用std::string参数,使用它而不是数组和返回指针.

  • 而可变长度数组首先是不合法的. (3认同)
  • @jjepsuomi,你总是可以回退并使用`string.c_str()`来检索C字符串. (3认同)