Если вы хотите динамически выделить строку, вам нужно передать указатель на char*
, а не просто char *
. Таким образом, функция может изменить действительный указатель char *
, и вызывающая сторона увидит результат. В вашем текущем коде переменная input
существует только внутри функции и не влияет на переменную, используемую вызывающей стороной, поэтому ваш arr
остается неизменным (NULL
).
Примерно так:
int getString(char **input)
{
int i;
char c;
char *tmp, *cur = NULL;
// No initial malloc() needed here.
// Let realloc() do the job passing NULL the first time.
for (i = 0; (c = getchar()) != EOF && c != '\n'; ++i) {
tmp = realloc(cur, (i + 2) * sizeof(char));
if (tmp == NULL) {
free(cur);
printf("allocation error");
return -1;
}
cur = tmp;
cur[i] = c;
}
cur[i] = '\0';
*input = cur;
return 0;
}
А затем передать параметр следующим образом:
getString(&arr);