如题,我想生成一个8到14位的随机用户名,首位不能为数字,代码如下,但是生成的用户名中偶尔会包含“↕”类的字符,不知道是哪里出错了,请大侠们指点一下!
//*******************************部分代码***********************************
CString CUsersPropertyPage::GetRandUser(void)
{
char chrArray[36]={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
CString strRet;
srand((unsigned)time(NULL));
strRet=chrArray[10+rand()%34];
for(int i=0;i<(8+rand()%14);i++)
{
strRet=strRet+chrArray[rand()%35];
}
return strRet;
}
//*******************************代码结束***********************************请问是哪里出错了?谢谢!

解决方案 »

  1.   

    strRet=chrArray[10+rand()%34];
    10+33=43;
    已经超出了chrArray的范围。strRet=strRet+chrArray[rand()%35];
    在超出范围的情况下,还要再增加,范围更大。
      

  2.   

    谢谢LuciferStar的回答!
    再请问下,把代码改成如下内容,是否正确?
    //*******************************部分代码***********************************
    CString CUsersPropertyPage::GetRandUser(void)
    {
    char chrArray[36]={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
    CString strRet;
    srand((unsigned)time(NULL));
    strRet=chrArray[rand()%26+10];
    for(int i=0;i<(rand()%7+8);i++)
    {
    strRet=strRet+chrArray[rand()%35];
    }
    return strRet;
    }
    //*******************************代码结束***********************************
      

  3.   


    CString CUsersPropertyPage::GetRandUser(void)
    {
        char chrArray[36]={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
        CString strRet;
        srand((unsigned)time(NULL));
        strRet=chrArray[rand()%26+10];
        int nNum = (rand()%7+8);   //先把个数求出来,要不每次判断时都求一次,就不同了
        for(int i=0;i<nNum;i++)
        {
            strRet=strRet+chrArray[rand()%36];//%36才对,这样才能取到全部0--35,要不最后一个字母永远取不到
        }
        return strRet;
    }