4

任何人都请告诉我,这段代码有什么问题

#include<stdio.h>
bool func(char *,int);
void main()
{
   char *a="Interview";
   if(func(a,9))
   {
      printf("True");
   }
   else
   {
      printf("False");
   }

}
bool func(char *s, int len)
{
   if(len < 2)
      return true;
   else
      return s[0] == s[len-1] && func(&s[1], len-2);
}

我相信这个函数总是返回TRUE。这是一道面试题。但是,当我尝试编译它时,它显示6 个错误..

4

2 回答 2

16

我猜它不知道booltrue是什么。bool不是 C 中的原始数据类型,您需要额外的包括:

#include <stdbool.h>

你问题的第二部分?Does it always return TRUE?

否:当您进入函数时,您将跳过第一次返回,因为您的长度为 9。因此,只有在以下情况下您true才会返回:

return s[0] == s[len-1] && func(&s[1], len-2)

是真的。您可以在此处跳过递归逻辑,因为它不会修改您的字符串,只需查看第一部分:

s[0]     // this has to be 'I'
==       // we need so what we compare against has to be 'I' as well
s[len-1] // This will be 'w'

所以......这不会返回真实......谁在乎ANDing(&&)递归部分?我怀疑编译器甚至会优化它,因为这里的所有内容都是硬编码的。

于 2012-11-07T16:45:47.410 回答
4

您只需要包含正确的标题。

#include <stdbool.h>

或者,您可以使用_Bool不需要任何包含的类型。bool只是这种类型的别名。顺便说一句,别忘了用 C99 编译。

于 2012-11-07T16:46:02.840 回答