随机字符串生成函数不返回[关闭]

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 &lt; 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;codestring[] 并且函数被声明为返回单个string 时不起作用。您必须将 code 改为 char[]

以上是关于随机字符串生成函数不返回[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

php中如何生成1-15之间的随机数?

javascript生成随机字符[重复]

PHP中的几个随机数生成函数

JAVA函数的返回值类型详解以及生成随机数的例题

excel怎么随机生成字母

如何创建一个装饰器来装饰生成器函数? [关闭]