首页 > 解决方案 > 我在 C 中的随机字符串生成器不起作用

问题描述

#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';
}

我尝试随机字符串生成器失败了,但我真的不知道为什么,有人可以帮我吗?当我编译它时,我得到的输出什么都没有,屏幕上没有字符串或没有字符。

标签: cstring

解决方案


两个主要问题:

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

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

还有一个小问题:你srand在循环中调用。这将在每次迭代时重置种子,如果使用相同的数字(很可能在这里)播种,那么rand函数返回相同的值。您应该只为随机数生成器播种一次


推荐阅读