2012-11-10 21 views
1

在這段代碼中,我試圖編寫一個函數,如果兩個字符串不匹配,返回0值,如果我能找到一個子字符串那個wholey重複patt。在這裏找不到一個bug ... C代碼

#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參數設置爲changable。

+1

如何在調試器中單步執行? –

+1

你是在做這個只是作爲遞歸的學習練習,還是你對這個問題的解決方案? –

+0

我試過了,但是我不擅長調試。 – brnady

回答

7

b已經是指向int的指針,因此您想要使用b而不是&b進行遞歸調用。

任何體面的編譯器,如果啓用了警告,將會提醒您該錯誤!

+1

要添加到此 - 如果您使用的是'gcc',請確保您正在使用'-Wall'開關進行編譯。 –

2
return *b * (1 + check(str+1,patt+1,&b)); 
            ^dont pass address. 

通過b代替它。

+0

謝謝!我得到了警告,但忽略了,因爲我以前做過... – brnady

+0

(我是一個初學者,所以我認爲警告並不重要!) – brnady