随机生成字符串的方法 求解释

//产生长度为length的随机字符串  
char* genRandomString(int length)  
{  
    int flag, i;  
    char* string;  
    srand((unsigned) time(NULL ));  
    if ((string = (char*) myMalloc(length)) == NULL )  
    {  
        myLog("Malloc failed!flag:14\n");  
        return NULL ;  
    }  

    for (i = 0; i < length - 1; i++)  
    {  
        flag = rand() % 3;  
        switch (flag)  
        {  
            case 0:  
                string[i] = 'A' + rand() % 26;  
                break;  
            case 1:  
                string[i] = 'a' + rand() % 26;  
                break;  
            case 2:  
                string[i] = '0' + rand() % 10;  
                break;  
            default:  
                string[i] = 'x';  
                break;  
        }  
    }  
    string[length - 1] = '\0';  
    return string;  
}  
    这个方法能简单的解释下么,有些看不懂新手,非常感谢
 这代码目测根本就不对,它产生大写、小写、数字的概率各为1/3,这意味着数字出现的概率要大(按理说数字出现的概率是10/62,在这里是1/3)

srand((unsigned) time(NULL ));  
初始化随机数种子

myLog("Malloc failed!flag:14\n"); 
分配内存

flag = rand() % 3;  
这一行决定了产生大写、小写、数字的概率各1/3, rand()产生一个随机整数,对它取余,结果是0 1 2的概率各自1/3

string[i] = 'A' + rand() % 26; 产生一个随机数字,因为ascii中A~Z是连续的,所以用A+一个随机的0~25之间的数,可以得到一个随机大写字母
下面的类似

string[length - 1] = '\0';  字符串结束