Прочитайте строку, используя рекурсию, и верните указатель на строку - PullRequest
0 голосов
/ 04 ноября 2019

Мне нужно создать функцию char * read_line (void), которая рекурсивно читает символ, поэтому при каждом рекурсивном вызове она создает локальную переменную char, а когда считывается символ ввода, она может определить, сколько памяти необходимо длябыть выделенным, чтобы он мог в конечном итоге вернуть указатель на строку. Строка должна заканчиваться символом \ 0. Я могу использовать только один вызов malloc, я не могу использовать глобальные или статические переменные или другие контейнеры. Я могу использовать любые пользовательские вспомогательные функции. Запрещенные слова: realloc; calloc; strcpy; strncpy; 10 Я знаю, что это нецелесообразно, но это домашнее задание.

1 Ответ

0 голосов
/ 04 ноября 2019

Для окончательного вызова потребуется

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