You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++生成8位随机伪数后附加额外数字带横杠问题求助

问题原因及解决方法

问题根源

  1. 数组越界访问:你定义的int pass[8]只有8个元素,合法索引范围是0~7,但passGen和Register中的循环都用了i <= 8,这会强制访问第9个不存在的元素(索引8)。这种未定义行为会读取内存中的随机垃圾值,当这个值是负数时,to_string()会把它转换成带负号的字符串,也就是你看到的-1413481856这类内容。
  2. 额外问题:rand() % 8生成的是0~7的数字,如果你需要的是0-9的完整数字位,这里应该改成rand() % 10。

修复方案

1. 修正循环边界

把两个循环的条件从i <= 8改为i < 8,确保只访问数组的有效元素:

修改后的passGen函数:

void passGen(int p[])
{
    int iTest;
    for (int i = 0; i < 8; i++)
    {
        iTest = rand() % 10;  // 生成0-9的数字,若仍需0-7可保留%8
        p[i] = iTest;
    }
}

修改后的Register中拼接字符串的循环:

string password;
for (int i = 0; i < 8; i++)
{
    password += to_string(pass[i]);
}

2. 初始化随机数生成器(可选但推荐)

默认情况下rand()生成的随机序列是固定的,每次运行程序都会得到相同的"随机数"。可以在程序开头(比如main函数第一行)添加初始化代码,让每次生成的序列不同:

#include <ctime>  // 需要包含这个头文件

int main()
{
    srand(time(nullptr));  // 用当前时间作为随机种子
    // 后续调用Register等函数
}

内容的提问来源于stack exchange,提问作者DariusNarib

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 16:30:16