C++ 随机字符串 return 意外结果

C++ Random String return unexpected results

我正在尝试使用函数生成 char[] :

char* randString(){
    const int len = 5;
    char s[len] = {0};

    static const char alphanum[] =
        "0123456789"
        "!@#$%^&*"
        "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
        "abcdefghijklmnopqrstuvwxyz";

    int stringLength = sizeof(alphanum) - 1;
    for (int i = 0; i < len; ++i) {
        s[i] = alphanum[rand() % stringLength];
    }

    return s;
}

结果是随机的,预计在 return s

+       s   0x002df990 "XnQWp...    char[5]

但是,当我查看此处的值时:

char* rand = randString();

它包含奇怪的值:

+       rand    0x002df990 "XnQWpÌÌÌÌÌÌÌÌÌÌÌ\x5"    char *

我是不是在 return 中做错了什么?

您将 char s[] 声明为局部变量。局部变量在函数 returns 时被销毁,因此返回指向该变量的指针 returns 指向垃圾数据的指针。

通过动态分配 s 来解决这个问题:

char* s = new char[len];

或者您可以传递一个 char* 作为参数并将您的角色写入该数组。

记得在返回前添加终止空字符。