2012-01-13 174 views
0

我不斷收到壞指針。誰能告訴我我做錯了什麼?搜索字符串數組中的字符串

int SearchString(char* arr[], char* key, int size) 
{ 
int n; 
for (n = 0; n < size; ++n) { 
    if (strcmp(arr[n], key)) { 
     return n; 
    } 
} 
return -1; 

} 

char str[][16] = { "mov","cmp","add","sub","lea","not","clr","inc","dec","jmp","bne","red","jrn","psr","rts","stop"}; 

    if(SearchString(str,"word",16) == -1){ return FALSE;} 
+0

你的'str'是一個由16個字符串組成的數組(編譯器自動創建了16個),每個字符串可以包含15 + 1個字符(指定爲第二維)。你可以用'char str [] [4] = {「mov」,「cmp」,...};'if'(strString(str,「word」,sizeof str/sizeof * str) == -1)/ * ... * /;' – pmg 2012-01-13 10:23:32

回答

4

無法確定word的來源。你可能想要if (!strcmp(arr[n],key)) return n;(相反)。而陣列的類型可能不是你想要的。嘗試

const char *str[] = { "mov",.... }; 

改爲。你有一個字符數組的數組,並將其傳遞到實際需要指針數組的地方。

0

strcmp()回報如果字符串相等!您的測試應該是if (!strcmp(...))

另外,請考慮使用strncmp()

3

變化char str[][16]變爲char *str[16](或只有char *str[])。

此外,strcmp返回零當字符串是平等的,所以你要這個:

if (strcmp(arr[n], key) == 0) { 
1

該參數爲char **通過AR這是不正確的。

其中一個替代品正在改變protopype到:

int SearchString(char arr[][16], char* key, int size) 得到預期的行爲。