gpt4 book ai didi

c++ - C/C++ - 生成一个随机字符串覆盖以前的(见下面的代码)

转载 作者:太空宇宙 更新时间:2023-11-04 07:21:16 25 4
gpt4 key购买 nike

我正在尝试使用找到的代码 here 生成随机字母数字字符串(下面重复的函数代码):

代码:

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);(或它之前的断点),则 image_id 会被正确存储。

这怎么可能?我在这里错过了什么?

最佳答案

我不确定这是否是导致您出现问题的根本原因,但这是一个错误:在函数 gen_random 中:

s[len] = 0;

当您调用 gen_random(image_id, 32); 时,您将导致缓冲区溢出的 image_32[32] 分配为数组 image_32 只有 32 个元素。只有索引 031 才是有效的。

关于c++ - C/C++ - 生成一个随机字符串覆盖以前的(见下面的代码),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21501895/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com