2012-01-13 35 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

パラメータが正しくないのchar ** ARとして渡されます。予想される動作を取得するために

int SearchString(char arr[][16], char* key, int size)

選択肢の一つは、にprotopypeを変更しています。

関連する問題