使用递归读取一行并返回指向字符串的指针

问题描述 投票:0回答:1

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

c string pointers recursion dynamic-memory-allocation
1个回答
0
投票
需要进行最后的通话

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

© www.soinside.com 2019 - 2024. All rights reserved.