首页 > 解决方案 > 如何在每次执行中生成随机字符串(下一个必须不同于上一个)?

问题描述

我有以下代码,每次执行程序时只生成一个固定字符串,已经在 2 台计算机上测试过,并且总是生成相同的字符串。那么如何在每次执行中生成不同的字符串呢?

void gen_random(char *s, const int len) {
    static const char alphanum[] =
        "0123456789"
        "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
        "abcdefghijklmnopqrstuvwxyz";

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

    s[len] = 0;
}

// int _tmain(int argc, _TCHAR* argv[])

char str[MAX_PATH]; 
gen_random(str, 10);

标签: c++visual-studio-2013

解决方案


rand通常是一个伪随机数生成器。数字序列完全由 PRNG 的种子确定,如 设置srand。由于您没有明确设置种子,因此您总是得到相同的种子,因此得到相同的序列。

请注意,较新的<random>标头具有更好的解决方案 - 更好的算法、更好的播种、更多的范围、更多的分布......


推荐阅读