生成随机 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;
}
我正在尝试找到生成随机 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;
}