C / C ++ - генерация случайной строки перезаписывает предыдущую (см. Код ниже)

0

Я пытаюсь создать случайную буквенно-цифровую строку, используя код, найденный здесь (код функции повторяется ниже):

Код:

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 правильно сохраняется.

Как это может быть возможным? Что мне здесь не хватает?

Теги:
string

1 ответ

4
Лучший ответ

Я не уверен, является ли это основной причиной возникновения вашей проблемы, но это ошибка: внутри функции gen_random:

s[len] = 0;

Когда вы вызываете gen_random(image_id, 32); , вы назначаете image_32[32] который вызывает переполнение буфера, поскольку массив image_32 имеет только 32 элемента. Действителен только индекс от 0 до 31.

  • 0
    Я исправил это, но это не имело никакого значения. Хорошо поймать.
  • 0
    +1 Да - наличие стека, где feature_id находится сверху image_id
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню