Проблемы с массивами Char и 2D-указателями - PullRequest
0 голосов
/ 04 марта 2012

Это часть задания для завершения поиска слова. Я должен использовать аргументы командной строки для поиска предопределенного 2D-массива. Мне нужно искать только по горизонтали (слева направо), по диагностике (слева направо и снизу справа) и по вертикали (сверху вниз). Я напишу Diag и Vert, как только пойму проблему с указателем.

Я получаю

warning: comparison between pointer and integer

Это происходит в следующем операторе if

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

Почему я получаю предупреждение и что мне не хватает в моем понимании указателей, которые мешают мне сделать это.

Я пробовал разные варианты * 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;
    }
}

1 Ответ

2 голосов
/ 04 марта 2012

argv - массив строк;char** и g - массив массивов char;a char[][].

Следовательно, argv[count] имеет тип char* (строка), а g[i][j] имеет тип char.Вы сравниваете указатель на один char, целочисленный тип.Это то, что говорит вам предупреждение.

Если вы хотите найти char s из g внутри argv[count], то вам понадобится разыменовать argv[count] один уровеньдалее, и работайте с отдельными char с в диапазоне от argv[count][0] до argv[count][strlen(argv[count]) - 1].

...