C ++ Random String返回意外结果

时间:2015-02-08 07:33:28

标签: c++ c arrays char

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

我在回报中做错了吗?

1 个答案:

答案 0 :(得分:2)

您将char s[]声明为本地变量。函数返回时会破坏局部变量,因此返回指向该变量的指针会返回指向垃圾数据的指针。

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

char* s = new char[len];

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

请记住在返回之前添加终止空字符。