C 为什么我不能生成超过1个随机字符串?
我这里的代码总是生成一个长度为C 为什么我不能生成超过1个随机字符串?,c,random,C,Random,我这里的代码总是生成一个长度为MAXLEN的字符串,但随后开始生成长度较短的字符串。我不知道为什么会这样 void generate_strings(int n) { char genvals[] = "abcdefghijklmnopqrstuvwxyzABC" "DEFGHIJKLMNOPQRSTUVWXYZ0123456789 "; char str[MAXLEN + 1]; int i = 0, j = 0; fo
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);
}
}
void生成_字符串(int n){
char genvals[]=“abcdefghijklmnopqrstuvwxyzABC”
“defghijklmnopqrstuvwxyz012456789”;
char-str[MAXLEN+1];
int i=0,j=0;
对于(i=0;i
我已经有一段时间没有使用C语言了,但我认为这是因为您没有为它添加种子。尝试将此添加到for循环上方
int seed = time(NULL);
srand(seed);
有几个变化:
1) 正如DazedandMiddle在他的回答中指出的那样,您需要为随机数生成器添加种子
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);
}
}
void生成_字符串(int n){
srand(time(NULL));//为随机数生成器设定种子
char genvals[]=“abcdefghijklmnopqrstuvwxyzABC”
“defghijklmnopqrstuvwxyz012456789”;
size_t length=strlen(genvals);//只计算一次
char-str[MAXLEN+1];
int i=0,j=0;
对于(i=0;i
表达式rand()%strlen(genvals)-1
很可能取值-1
,在这种情况下,您的代码具有未定义的行为。@KerrekSB删除-1
修复了它。出于某种奇怪的原因,我认为如果不在genvals
中加上-1,我就永远不会得到第一个值。干杯。注意:charstr[MAXLEN+1]代码>和str[MAXSTRLEN]
。它们是一样的吗?@PaulOgilvie我刚试过str[MAXSTRLEN]
,结果它崩溃了。该函数将无法以这种方式插入空字节,对吗?还不清楚您想要实现什么。缺少的东西太多了。请参阅并提供一个示例。