0

在这段代码中,我尝试编写一个函数,如果两个字符串不匹配,则返回 0 值,如果我可以在 str 中找到一个完全重新编码 patt 的子字符串,则返回匹配字符的长度。

#include....

int check(char *str, char *patt, int *b)
{   
    if (*str == *patt && *patt != 0)
        return *b * (1 + check(str+1,patt+1,&b));
    else if (*patt == 0)
        return 0;
    else{
        *b = 0;
        return 0;
    }
}

main()
{
    char s1[SIZE] = "mama";
    char s2[SIZE] = "mama";
    int b = 1;

    printf("%d\n",check(s1,s2,&b));
    b = 1;          

    system ("pause");
    return;
}

在这里我应该得到输出 4,但我得到 -77779463。感谢帮助!

PS 我使用递归并将 b 参数设置为可更改的。

4

2 回答 2

7

b已经是指向 an 的指针int,因此您想使用band not进行递归调用&b

任何体面的编译器,启用警告,都会提醒你这个错误!

于 2012-11-10T23:35:26.067 回答
2
return *b * (1 + check(str+1,patt+1,&b));
                                    ^ dont pass address.

b改为传递给它。

于 2012-11-10T23:36:20.457 回答