今天寫了乙個kmp演算法,但是在使用strlen()函式獲取字串長度時,發現程式和預期不對,無論怎樣除錯結果依舊如此。因此我就找到了strlen()函式的定義,如下**:
size_t __cdecl strlen(
_in_z_ char const* _str
);
可以看出來函式返回為size_t型別,再來看看他在c語言中的定義,為unsigned int型別,無符號整形。
typedef unsigned int size_t;
再來看看我的**:
int kmp(char *s, char * p,int *next)
else
j = next[j];
} if (j == strlen(p))
return i-j;
else
return -1;
}
由於使用kmp演算法,為了方便寫程式next陣列的第一位值為-1,小於零,所以在程式執行的過程中存在j的值為-1的情況,在執行while語句時
while (i < strlen(s) && j < strlen(p))
會出現-1和strlen()函式作比較的情況,在這種情況下-1會被強制轉化成unsigned int型資料,(unsigned int)-1 =4294967295,是乙個大於0的數。會出現while()語句不執行的情況,所以就出現了無論怎樣除錯都無法達到預期效果的情況。
解決這個問題的方法很簡單,只需要定義兩個int型變數,現將字串的長度儲存起來,在進行比較就可以了。
C語言 使用函式時遇到的問題
函式是一段 塊,由 返回型別 函式名 函式引數 構成。定義函式有兩種方式。一種是宣告與函式體放在一起,另一種是在main函式之前進行宣告,把函式塊放在 最後。我們通常使用後者 如下所示 include intfunction int a,int b int main intfunction int ...
在使用vue 全域性filter時遇到的問題
param statusnum export function userstatusfilter statusnum case 2 return userstatus 一直不生效,顯示空白.後來通過增加default選項,確定了過濾器是生效的.那就是函式內條件的格式問題,給case後面的數字加上冒號...
使用ToluaFrameWork時遇到的一些問題
最近的專案在使用tolua框架熱更新。在做初期準備時,拿著github上的toluaframework進行學習和修改,在匯出安卓包時,遇到了一些問題,因此記錄了一下。1.plugins目錄下的x86和x86 64資料夾中的tolua要設定成不同的平台,android libs的armeabi v7a...