为什么我无法生成超过1个随机字符串?

时间:2016-05-06 15:04:41

标签: c random

我的代码总是生成一个长度为MAXLEN的字符串,但后来开始生成长度较短的字符串。我不确定为什么会这样。

void generate_strings(int n) {
    char genvals[] = "abcdefghijklmnopqrstuvwxyzABC"
                     "DEFGHIJKLMNOPQRSTUVWXYZ0123456789 ";
    char str[MAXLEN + 1];
    int i = 0, j = 0;
    for (i = 0; i < n; i++) {
        for (int j = 0; j < MAXLEN; j++) {
            str[j] = genvals[rand() % strlen(genvals) - 1];
        }
        str[MAXSTRLEN] = '\0';
        printf("%s\n", str);
        memset(str, 0, MAXLEN);
    }

}

2 个答案:

答案 0 :(得分:0)

一些变化:

1)在他的回答中指出了dazedandconfused,你需要为随机数生成器播种。

2)不要多次计算genvals的长度。

3)您对genvals的索引不正确。

4)无需拨打memset

void generate_strings(int n) {
    srand(time(NULL)); // seed the random number generator
    char genvals[] = "abcdefghijklmnopqrstuvwxyzABC"
                     "DEFGHIJKLMNOPQRSTUVWXYZ0123456789 ";
    size_t length = strlen(genvals); // only calculate this once
    char str[MAXLEN + 1];
    int i = 0, j = 0;
    for (i = 0; i < n; i++) {
        for (int j = 0; j < MAXLEN; j++) {
            str[j] = genvals[rand() % length];
        }
        str[MAXLEN] = '\0';
        printf("%s\n", str);
    }
}

答案 1 :(得分:-1)

自从我和C合作以来已经有一段时间了,但我认为这是因为你没有播种。尝试在for循环上面添加这个...

int seed = time(NULL);
srand(seed);