我写了一个函数来生成随机名称。这是我的代码
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';
我遇到了分段错误。为什么呢?
答案 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);