随机字符串生成函数不返回[关闭]
Posted
技术标签:
【中文标题】随机字符串生成函数不返回[关闭]【英文标题】:Random string generation function not returning [closed] 【发布时间】:2021-08-24 18:14:59 【问题描述】:我有以下函数,旨在返回由 62 个字符组成的 16 个字符长的字母数字字符串 char 类型 alphanumeric() 函数可以返回(A-Z、a-z 以及数字 0-9)。
string random()
string code;
int i;
srand(time(NULL));
for (i = 0; i < 16; i++)
code[i] = alphanumeric((rand() % 62));
return code;
在返回行代码中断。
【问题讨论】:
这能回答你的问题吗? Return array in a function 我认为您要么禁用了编译器警告,要么没有查看它们。您的编译器想要与您讨论return code[16];
your rubber duck也是如此。
【参考方案1】:
string code[16]
这将创建一个包含 16 个字符串的数组。这可能不是你想要的。字符串是任意长的字符序列。你真的只想要一个字符串。
我不知道您的 alphanumeric()
方法是做什么的,但如果它返回一个字符串,那么您将创建 16 个字符串,每个字符串包含 1 个字符。
哦,返回 code[16]
超出范围。 code[15]
是最后一个字符串。 16 已经结束了。
【讨论】:
【参考方案2】:这个返回语句
return code[16];
返回一个不存在的数组元素
string code[16];
因为数组的有效索引范围是 [0, 15]。
而不是声明一个数组
string code[16];
你需要声明一个 std::string 类型的对象
std::string code;
code.reserve( 16 );
在这种情况下,for 循环看起来像
for (i = 0; i < 16; i++)
code += alphanumeric((rand() % 62));
return 语句看起来像
return code;
【讨论】:
我会使用resize()
(或字符串构造函数)而不是reserve()
,然后继续使用code[i] = ...
而不是code += ...
。否则,您仍然可以为code
使用数组,只需将其更改为char[]
,然后让return
为您隐式将char[]
转换为string
,例如:char code[16]; srand(time(NULL)); for (int i = 0; i < 16; i++) code[i] = alphanumeric(rand() % 62); return code;
【参考方案3】:
在您提供的代码中,您尝试返回“code”数组的最后一个元素,即“code[15]”,因为数组从 0 开始,您将超出数组的范围。
要解决这个函数的问题,只需输入:“return code;”
[编辑]
考虑到“字母数字”函数采用单个整数参数(假设在本例中为索引)并根据索引返回 [0-9A-Za-z],此函数的修订版本使用“#include
#include <iostream>
#include <string>
using namespace std;
char alphanumeric(int index)
static const char alphanum[] =
"0123456789"
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz";
return alphanum[index];
//We could also specify a length parameter to return different randomized string sizes
string random()
string code;
int i;
srand(time(NULL));
for (i = 0; i < 16; i++)
code += alphanumeric((rand() % 62));
return code;
int main()
cout << random() << endl;
【讨论】:
除非return code;
在code
是string[]
并且函数被声明为返回单个string
时不起作用。您必须将 code
改为 char[]
。以上是关于随机字符串生成函数不返回[关闭]的主要内容,如果未能解决你的问题,请参考以下文章