如果它放在通用库中,该函数会导致什么错误?

时间:2013-02-27 12:45:10

标签: c++ c data-structures

int foo(char *p)
{
static int i = 0; 
if (*p == '\0') return i;
i++;
return foo(p+1);
}

如果将此函数放在通用库中,会出现什么问题。如何修改代码以回避问题? 如果将此代码放在通用库中,它将返回正确的字符串长度吗?

2 个答案:

答案 0 :(得分:2)

一个问题是状态在呼叫之间持续存在:

foo("hello");
foo("world");

第二次调用会返回错误的结果,因为i未重置。

答案 1 :(得分:2)

如果您连续两次调用它,i将不会是您所期望的。那是因为它在启动时初始化并保持其之前的呼叫值。

此外,它不适用于线程,并且当“搜索空间”快速减少时,最好使用递归的想法,就像二进制搜索在每个递归级别将空间减半一样。

使用递归处理字符串字符是一个愚蠢的想法,因为您一次只能将搜索空间减少一个字符。