生成随机 char/digit

Generate random char/digit

我正在尝试找到生成随机 digit/char 数组的最快方法。

char *randomGet(int num) {
    srand(time(NULL));
    const char ab[37] = { "0123456789ABCDEFGHIGKLMNOPQRSTUVWXYZ" };//Alphabet&Digit
    char *targ = new char[num];
    for (int i = 0; i < num; i++) {
        strcat(targ, ab[rand() % 38]);
    }
    return targ;
}

到目前为止我已经想到了这个,但是它不起作用(char 类型的参数与 const char * 类型的参数不兼容)。 帮助我找到解决问题的最佳方法。 Ty.

我要进行两项更改。首先,将内部源数组设为静态:

static const char ab[] = "0123456789ABCDEFGHIGKLMNOPQRSTUVWXYZ";

注意这个版本没有指定数组大小;编译器将从初始化程序中找出它。

其次,传入一个指向目标数组的指针:

void randomGet(char* targ, int num) {
    static const char ab[] = "0123456789ABCDEFGHIGKLMNOPQRSTUVWXYZ";
    for (int i = 0; i < num - 1; ++i)
        targ[i] = ab[rand() % (sizeof ab - 1)];
    targ[num - 1] = '[=11=]';
}

这样,调用者决定如何为字符串分配内存。

strcat()char* 作为输入,但你给它一个 char,因此编译器错误。

此外,strcat() 写入的缓冲区必须以空字符终止,但您的 targ 缓冲区最初不是以空字符终止的,并且您没有为最终分配足够的 space无论如何都是空终止符。

您根本不需要使用 strcat()。由于无论如何你都在循环,只需使用循环计数器作为在缓冲区中写入的索引:

此外,您在对 rand() 的 return 值求模时使用了错误的整数值。您正在生成一个 可能 超出 ab[] 数组范围的随机索引。

试试这个:

char *randomGet(int num)
{
    srand(time(NULL));
    static const char ab[] = "0123456789ABCDEFGHIGKLMNOPQRSTUVWXYZ"; //Alphabet&Digit
    char *targ = new char[num+1];
    for (int i = 0; i < num; ++i) {
        targ[i] = ab[rand() % 36];
    }
    targ[num] = '[=10=]';
    return targ;
}