【发布时间】:2013-10-14 15:19:44
【问题描述】:
我想出了这个小代码,但所有专业人士都说它很危险,我不应该写这样的代码。谁能在“更多”细节中突出其漏洞?
int strlen(char *s){
return (*s) ? 1 + strlen(s + 1) : 0;
}
【问题讨论】:
-
你为什么不问问所有这些专业人士他们的意思?它可能效率不高,但我不会称之为危险。尤其是对于可能会优化尾递归的相当现代的编译器。
-
有些语言实际上没有循环(ML)
-
@IgorTandetnik,这不是尾递归。
-
@IgorTandetnik 它不是写的尾递归,因为在调用之后仍有工作要做(添加一个)。它可以手动或自动转换为尾递归函数,但我不希望 C 编译器自动完成。
-
还有一个没有人提到的小危险。你应该使用
size_t,而不是int。否则你可能会在int小的平台上遇到大字符串的麻烦。
标签: c++ c string recursion strlen