2017-04-10 12 views
-1
void check_vertical_win(char A[rows][columns]){ 
    int i,j; 
    char *str1=A[i][j]; 
    char *str2=A[i-1][j]; 
    char *str3=A[i-2][j]; 
    char *str4=A[i-3][j]; 
    int elegxos1; 
    int elegxos2; 
    elegxos1=strcmp(str1,str2); 
    elegxos2=strcmp(str3,str4); 
    for(j=0;j<6;j++){ 
     for(i=6;i>=3;i--){ 
      if(elegxos1==0 && elegxos2==0){ 
       printf("\nBill is the winner.\n"); 
      } 
     } 
    } 
} 

行列の2つの文字列が等しいかどうかを調べたいので、strcmp関数を使用しています。しかし、コンパイラは警告を出します。初期化は、キャストのない整数からポインタを作成します。 (私はプログラムを実行するとき、それは言う:Windowsは私の問題で解決策をチェックしている)。 私は他の同様のプログラムを見て間違いを見つけようと多くの試みをしましたが、私は見つけられません。strcmpを使用すると、初期化時にキャストのない整数からポインタが生成される

+0

ラインはそれを参照していますか? –

+3

'char * str1 = A [i] [j];' ............もっと見る... –

+1

'char * str1 = A [i] [j];'この行(そして次の3行も)間違っていて、少なくともコンパイラの警告を受けるでしょう。 –

答えて

2
void check_vertical_win(char A[rows][columns]) 

これは、文字列を取ります。あなたは、各エントリが文字列である行列を持っている場合、それは次のようになります。また

void check_vertical_win(char* A[rows][columns]) 

それらが初期化される前に、あなたは(彼らはゴミが含まれている)、変数iとjを使用している:

int i,j; 
char *str1=A[i][j]; 
char *str2=A[i-1][j]; 
char *str3=A[i-2][j]; 
char *str4=A[i-3][j]; 
+0

それでは、strcmpやポインタを使わずに2つ以上の文字列を比較するにはどうすればよいですか(私はCプログラミングの初心者です)? – vasilistheod

+0

Cの文字列はポインタなので、ポインタを使用する必要があります。独自の文字列比較を書くことはできますが、文字列が標準ライブラリで扱えないエンコーディングを使用しない限り、strcmp(またはstrncmp)に固執する必要があります。 – Novotny

+0

私は2つの文字列が等しいかどうか調べたいとは思わないが、文字列が1つの文字列か別の文字列かどうかをチェックしたいのですがどうすればいいですか?strcmpはこれを行うことができません。 – vasilistheod

関連する問題