2012-01-13 3 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 문자 (2 차원으로 지정한 문자)를 저장할 수 있습니다. 당신은'char str [] [4] = { "mov", "cmp", ...}; 그리고 if (SearchString (str, "word", sizeof str/sizeof * str) == -1)/* ... * /;' – pmg

답변

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

매개 변수를 문자로 전달됩니다 ** 올바르지 않습니다 아칸소. 예상되는 동작을 취득

int SearchString(char arr[][16], char* key, int size) : 대안의

하나에 protopype을 변화하고 있습니다.