N00*_*dge 0 c++ string random stdstring
当我打电话时,我目前正在收到分段故障(分段故障:11)newUnitID()
.
不知道我做错了什么.
这是我的头文件,其函数是:
#include <iostream>
#include <cstring>
#include <string>
#include <cstdlib>
#include <ctime>
#include <vector>
#ifndef UnitManager
#define UnitManager
using namespace std;
char randomIDChar(){
static const char alphanum[] =
"0123456789"
"!@#$%^&*"
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz";
int stringLength = sizeof(alphanum) - 1;
srand(time(0));
for(int z=0; z < 21; z++)
{
return alphanum[rand() % stringLength];
}
return 1;
}
string newUnitID(){
vector<char> v;
for(int i=0; i < 50; i++){
v[i] = randomIDChar();
}
string str(v.begin(),v.end());
return str;
}
#endif
Run Code Online (Sandbox Code Playgroud)
vector的operator []访问现有元素; 它不会创建新元素.你从一个空向量开始
v[i] = randomIDChar();
Run Code Online (Sandbox Code Playgroud)
超越矢量结束的访问.你可以改成这个
v.push_back(randomIDChar());
Run Code Online (Sandbox Code Playgroud)
请注意,还有一个问题randomIDChar
.您应该只调用随机数生成器一次,可能在调用任一发布的函数之前.任何给定的种子都会产生可预测的"随机"数字流; time(0)
返回几秒钟,因此您在1秒内进行的每次通话都将具有相同的种子,因此在您稍后调用时将生成相同的数字rand