我在C中的随机字符串生成器不起作用

时间:2019-09-29 14:16:40

标签: c string

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>

void randomGenerator(char *id, int length);
int main(){
    char test[8];
    randomGenerator(&test[0],strlen(test));
    printf("%s",test);

}
void randomGenerator(char *id, int length){
    char alphabet[27] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    char *gen;
    gen = &alphabet[0];
    for (int i = 0;i<length-1;i++){
        srand(time(0));
        int random = rand() % strlen(alphabet);
        for (int k = 0; i < random;i++)
            gen++;
        id = gen;
        gen = &alphabet[0];
        id++;
    }
    id++;
    id = '\0';
}

我尝试使用随机字符串生成器失败,但是我实际上不知道为什么,有人可以帮我吗? 当我编译它时,输出结果是什么,屏幕上没有字符串或字符。

1 个答案:

答案 0 :(得分:2)

两个主要问题:

  • 在初始化数组的内容之前使用strlen(test),这意味着内容是不确定的,可能根本不包含空终止符。使用sizeof test来获取数组的大小(以字节为单位)。

  • randomGenerator函数中,您实际上并未写入数组的元素,而是重新分配了指针。像id = gen这样的赋值会重新分配指针,它不会写入指针所指向的位置。为此,您需要像在*id = *gen中那样取消引用指针。

还有一个小问题:您在循环中调用srand。这将重置种子每次迭代,如果种子具有相同的数字(很可能在此处),则rand函数 将返回相同的值。您应该只对随机数生成器一次进行种子设置。