Random 返回字符数组

Random 返回字符数组,random,character,Random,Character,我编写了一个函数来生成随机名称。这是我的密码 char *getrandumstring(int n) { int i; char *str; for(i=0;i<n;i++) { str[i] = (rand() % 26) + 'a'; } str[i]='\0'; return str; } 我犯了一个错误。为什么?您会遇到分段错误,因为在创建指针时,您没有为其分配任何备份存储 char *getRando

我编写了一个函数来生成随机名称。这是我的密码

 char *getrandumstring(int n)
{
    int i;
    char *str;

    for(i=0;i<n;i++)
    {


    str[i] = (rand() % 26) + 'a';
    }

    str[i]='\0';

    return str;
}

我犯了一个错误。为什么?

您会遇到分段错误,因为在创建指针时,您没有为其分配任何备份存储

char *getRandomString (int n) {
    int i;
    char *str = malloc (n + 1);
    if (str != NULL) {
        for (i = 0; i < n; i++)
            str[i] = (rand() % 26) + 'a';
        str[n] = '\0';
    }
    return str;
}
char*getRandomString(int n){
int i;
char*str=malloc(n+1);
如果(str!=NULL){
对于(i=0;i
上面的代码将成功分配内存并返回缓冲区。或者,如果没有可用内存,它将返回NULL。只要记住完成后把它放出来就行了

或者,如果不想使用动态内存分配,请让调用者也提供缓冲区:

void getRandomString (char *str, int n) {
    int i;
    for (i = 0; i < n; i++)
        str[i] = (rand() % 26) + 'a';
    str[n] = '\0';
}

// Somewhere else in your code:

#define STR_SZ 20
char buffer[STR_SZ+1];
getRandomStr (buffer, sizeof(buffer) - 1);
void getRandomString(char*str,int-n){
int i;
对于(i=0;i
谢谢。我用了第二个。但第一个也明白了。
void getRandomString (char *str, int n) {
    int i;
    for (i = 0; i < n; i++)
        str[i] = (rand() % 26) + 'a';
    str[n] = '\0';
}

// Somewhere else in your code:

#define STR_SZ 20
char buffer[STR_SZ+1];
getRandomStr (buffer, sizeof(buffer) - 1);