Я пытаюсь создать случайную буквенно-цифровую строку, используя код, найденный здесь (код функции повторяется ниже):
Код:
void gen_random(char *s, const int len) {
static const char alphanum[] =
"0123456789"
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz";
for (int i = 0; i < len; ++i) {
s[i] = alphanum[rand() % (sizeof(alphanum) - 1)];
}
s[len] = 0;
}
На первый взгляд, это отлично работает. Однако, когда я вызываю функцию дважды, возвращаемое значение перезаписывается. Позволь мне объяснить. Когда я использую код:
char image_id[32];
gen_random(image_id, 32); //image_id is correctly populated with a random string at this point.
char feature_id[32];
gen_random(feature_id, 32); //feature_id is correctly populated with a random string at this point. However, image_id is now an empty string?!?!?
image_id
становится пустой строкой. Однако, если я gen_random(feature_id, 32);
последнюю строку gen_random(feature_id, 32);
(или image_id
останова перед ним), то image_id
правильно сохраняется.
Как это может быть возможным? Что мне здесь не хватает?
Я не уверен, является ли это основной причиной возникновения вашей проблемы, но это ошибка: внутри функции gen_random
:
s[len] = 0;
Когда вы вызываете gen_random(image_id, 32);
, вы назначаете image_32[32]
который вызывает переполнение буфера, поскольку массив image_32
имеет только 32 элемента. Действителен только индекс от 0
до 31
.