2012-03-04 18 views
0

これはワード検索を完了するための割り当ての一部です。私は、コマンドライン引数を使用して、所定の2D配列を検索する必要があります。私は、水平(左から右)、診断(左上から右下)、および垂直(上から下)のみを検索する必要があります。 ポインタの問題をよく理解すれば、DiagとVertを書きます。文字配列と2D配列ポインタの問題

私はこれはこれをやってから私を防ぎポインタの私の理解では、私は警告を取得しないと私は何をしないのですなぜ、次のif文

if (argv[count] == g[i][j]){ 

で起こる

warning: comparison between pointer and integer 

を取得。

* gと(int star)gのさまざまなバリエーションを試してみましたが、警告よりも悪い結果が出ました。

ターンインのための警告フリーコードが必要です。

新しい人を助けてくれてありがとう。

#include <stdio.h> 
#define ROW 3 
#define COL 4 
#define TRUE 1 
#define FALSE 0 

int checkHoriz(char *data, char *data2); 

main(int argc, char *argv[]){ 
    int count, i, j, rowValue, colValue; 
    char g[ROW][COL] = {{'a','b','c','d'}, 
         {'d','c','b','a'}, 
         {'x','y','z','d'}}; 

    count=1; 
    if(argc>1){ 
     for(i=0; i<ROW; i++){ 
      for(j=0; j<COL; j++){ 
       if (argv[count] == g[i][j]){ 
        rowValue = i; 
        colValue = j; 
        if(checkHoriz(argv[count],g[i][j]) ==TRUE){ 
         printf("%s appears horizontally starting @ g[%d]{%d]. \n", argv[count], i,j); 
        } 
       } 
      } 
     } 
    }else{ 
     printf("No arguments were entered.\n"); 
    } 
} 

int checkHoriz(char *data, char *data2){ 
    int i = 0; 
    while (data == data2 && data!=' ' && data2 != '\0'){ 
     data++; 
     data2++; 
    } 
    if(data2 == '\0'){ 
     return 1; 
    }else{ 
     return 0; 
    } 
} 
+0

[このリンク](http://stackoverflow.com/posts/9552176/edit)から質問を編集できます。 – ruakh

答えて

2

argvは文字列の配列です。 char**およびgは、charアレイのアレイであり、 char[][]

したがって、argv[count]char*(文字列)であり、そしてg[i][j]charです。整数型のcharという単一のものへのポインタを比較しています。これは、警告があなたに伝えていることです。

あなたがargv[count]の内側gchar Sを検索したい場合は、あなたが一段階さらに間接参照argv[count]に必要になるだろう、とargv[count][0]argv[count][strlen(argv[count]) - 1]の範囲内で個々のchar秒で動作しています。

+0

argv [count] [0]は* argv [count]と同じですか? – CodeBlue

+1

@CodeBlue:演算子 '[] 'が演算子' * 'よりも優先順位が高いため、同じです。したがって、 '* argv [count]'は '*(argv [count])'と同じです。これは文字列の最初の 'char'を参照します。 – AusCBloke

+0

AusCBlokeありがとうございます。 – Larry