2012-01-13 130 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) 得到预期的行为。