c - 使用递归读入一行并返回指向该字符串的指针

标签 c string pointers recursion dynamic-memory-allocation

我需要创建一个 char *read_line(void) 函数,它递归地读入一个字符,因此每次递归调用它都会创建一个本地 char 变量,当读入输入字符时,它可以确定需要多少内存被分配,以便它最终可以返回一个指向字符串的指针。该字符串必须以\0 终止符结尾。我只能使用一次 malloc 调用,不能使用任何全局或静态变量或任何其他容器。我可以使用任何自定义辅助函数。禁用词:realloc;calloc;strcpy;strncpy;10 我知道这是不切实际的,但这是一项家庭作业。

最佳答案

最后的调用需要执行

char *str = malloc(i+1);
str[i] = 0;
return str;

需要执行其他调用

char *str = read_line_helper(...);
str[i] = ch;
return str;

这意味着每个调用都需要一个比调用者多 1 的 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);
}

关于c - 使用递归读入一行并返回指向该字符串的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58686483/

相关文章:

c 语言 - 通过函数验证用户输入

c - 打印最高勾股数 - C

python - 如何从 Python 语音识别中提取子字符串

c++ - 在 C++ 中,如何使用类成员来保存从基类派生的任何对象?

将 void* 转换为 double

c - main 和其他函数中的 malloc 指针地址差异

C-服务器 : Ncat: Connection reset by peer

c - 多次加倍变量,并将变量的所有迭代加在一起

string - F#,字符序列 -> 字符串

java - 特定单词之前的单词数