Для окончательного вызова потребуется
char *str = malloc(i+1);
str[i] = 0;
return str;
Для других вызовов потребуется
char *str = read_line_helper(...);
str[i] = ch;
return str;
Это означает, что для каждого вызова требуется i
, что на единицу больше, чем его вызывающий. ,Этого легко достичь, передав i+1
рекурсивной функции.
char *read_line_helper(size_t i) {
char ch = ...;
char *str;
if (...) {
str = malloc(i+1);
str[i] = 0;
} else {
str = read_line_helper(i+1);
str[i] = ch;
}
return str;
}
Первый вызов занимает 0
.
char *read_line(void) {
return read_line_helper(0);
}