为什么下面的代码不会在多次运行中生成随机字符串?

时间:2017-08-19 17:00:12

标签: c arrays string random

程序使用rand()函数生成随机索引。但无论如何它总是产生相同的字符串!为什么要赢得这项工作呢?

void rand_string()
{
    int a[10];
    int i;
    char b[] = "qwertyuiopasdfghjklzxcvbnm1234567890QWERTYUIOPASDFGHJKLZXCVBNM";
    printf("%d", sizeof(b) / sizeof(b[0]));

    for(i = 0; i < 10; i++)
    {
        int gen_rand = rand() % 63; 
        a[i] = b[gen_rand];
    }

    for(i = 0; i < 10; i++)
        printf("%c", a[i]);
}

2 个答案:

答案 0 :(得分:1)

使用srand函数为随机生成器播种

srand((unsigned)time(NULL));

请注意,您只需在程序中seed once,否则无法正常使用。

答案 1 :(得分:0)

您可以首先定义一个特定于您需要的随机函数,即在特定范围内生成(当前字符串的长度),如下所示:

int random(int min, int max) 
{ 
    return min + (rand()) / (RAND_MAX / (max - min)); 
}

然后在你的字符串随机生成器函数中,你还可以为每个字符串添加一个随机长度:

void rand_str()
{
    static const char alphanum[] =
    "0123456789"
    "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    "abcdefghijklmnopqrstuvwxyz";  // define only on first call

    // call srand() using #include <time.h> ; could be outside of function, i.e. in main()

    int length = random(0, 10);   // get random length in [0, 10] on each call

    // use length and random(0, sizeof(alphanum) / sizeof(alphanum[0])) in for loop

    // everything else is the same...
}

使用关键字static来表示数组alphanum的单个 1 定义(想想它就像使它成为全局的)并调用函数{{1} }一次,在使用srand()之前。

注意:您应该考虑将函数修改为单一用途,即仅生成随机字符串并返回(指向)字符串;并将其打印在单独的功能中。

1。仅在第一次调用random()