Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么我不能生成超过1个随机字符串?_C_Random - Fatal编程技术网

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]
,结果它崩溃了。该函数将无法以这种方式插入空字节,对吗?还不清楚您想要实现什么。缺少的东西太多了。请参阅并提供一个示例。