代码问题
我需要创建一个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;
这意味着每个呼叫都需要一个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);
}
如果觉得前端之家所整理的内容很不错的话,欢迎点击下方分享按钮,转发给身边开发程序员好友。