返回一个字符数组

时间:2012-02-23 07:22:28

标签: 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;
}

现在在

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

我遇到了分段错误。为什么呢?

1 个答案:

答案 0 :(得分:1)

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

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;
}

上面的代码将成功分配内存并返回缓冲区。或者,如果没有可用内存,它将返回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);