我的代码总是生成一个长度为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);
}
}
答案 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);