Вы получаете ошибку сегментации, потому что, хотя вы создали указатель, вы не выделили для него никакого резервного хранилища.
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);