C++随机字符串返回意外结果

C++ Random String return unexpected results

本文关键字:意外 结果 返回 字符串 随机 C++      更新时间:2023-10-16

我正在尝试使用一个函数来生成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 *

我的回报有错吗?

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

通过动态分配s修复此问题:

char* s = new char[len];

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

只需记住在返回之前添加终止的null字符。