我正在开发一个需要生成随机字符串的项目。它主要工作,除了某些原因,不时地,返回的字符串不是正确的长度。
$("#datetimepicker1 input[name='invoicedate']").datetimepicker({
locale: 'nl',
format: 'YYYY-MM-DD',
allowInputToggle: true,
useCurrent: false,
});
我传入26作为长度,我得到以下字符串返回:
string HelperMethods::generateRandomString(int length)
{
static const char alphanum[] =
"0123456789abcdefghijklmnopqrstuvwxyz";
stringstream randomString;
//Generate a seed for the random number generator
srand(time(0));
for (int i = 0; i < length; ++i)
{
randomString << alphanum[rand() % sizeof(alphanum) - 1];
}
return randomString.str();
}
为什么返回的字符串总是没有正确的长度?
答案 0 :(得分:10)
alphanum
中有一个NUL字符。毕竟,它是一个C字符串。当您尝试排除它时,-
的优先级低于%
。
因此rand() % sizeof(alphanum) - 1
与(rand() % sizeof(alphanum)) - 1
相同。您可能在某些时候访问数组的第一个元素之前。那就是那里明显的未定义行为。
此外,您不应该多次为随机数生成器播种。这也可能会扭曲结果。但是,它当然不像未定义的行为那么多。