生成随机字符/数字

Generate random char/digit

本文关键字:数字 字符 随机      更新时间:2023-10-16

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

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 * 类型的参数不兼容(。 帮助我找到解决问题的最佳方法。泰。

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

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

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

此外,在对rand()的返回值进行取模时,您使用了错误的整数值。 您正在生成一个随机索引,该索引可能超出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] = '';
return targ;
}

我会做两个更改。首先,将内部源数组设为静态:

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] = '';
}

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