C++生成8位随机伪数后附加额外数字带横杠问题求助
问题原因及解决方法
问题根源
- 数组越界访问:你定义的
int pass[8]只有8个元素,合法索引范围是0~7,但passGen和Register中的循环都用了i <= 8,这会强制访问第9个不存在的元素(索引8)。这种未定义行为会读取内存中的随机垃圾值,当这个值是负数时,to_string()会把它转换成带负号的字符串,也就是你看到的-1413481856这类内容。 - 额外问题:
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
相关产品推荐
相关产品推荐

