Сравнение двух символов [в C] - PullRequest
0 голосов
/ 03 июня 2018

У меня есть структура

struct Human {
    char            *name;
    struct location *location;
    int             cash;
    char            *weapon;

};

и еще одна:

struct World {
    char                *name;
    char                *weapon;
    int                 price;
};

Они находятся в заголовочных файлах и включены в программу .c.

Вопрос

Я хочу сравнить, если оружие такое же, как в обоих местах

Что я пробовал

int compareWeapons(struct bot *b,int whatToGet) // function signature
struct location *l =  b->location;
if ((strcmp(l->weapon,b->weapon) == 0)) { // do stuff }

** Я получаю сообщение об ошибке **

ошибка выполнения: загрузка нулевого указателя типа 'char'

Пожалуйста, посоветуйте мне, как сравнить два символа в разныхstruct, если не используется strcmp ??

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

Проблема не в сравнении строк, а в том, как вы объявляете свои структуры.

Кажется, вы используете (struct bot *) для ссылки на (struct Human).В этом случае он должен выглядеть следующим образом:

int compareWeapons(struct World *b, int whattoget);

Кроме того, ваша структура должна быть инициализирована, иначе вы ссылаетесь на структуру, которая ничего не содержит (NULL).

struct location
{
    //your struct variables
};

Ниже приведена ссылкас базовым примером инициализации структуры, https://www.cs.usfca.edu/~wolber/SoftwareDev/C/CStructs.htm

0 голосов
/ 03 июня 2018

Проблема в вашем коде не в strcmp, а в нулевом указателе, что означает, что переменная " b " == NULL, поэтому " b " не имеет "атрибут location", и именно здесь генерируется исключение NullPointerException .Я могу предложить проверить, как вы передаете аргументы своей функции. Используйте & , чтобы передать адрес (указатель) вашей переменной или просто имя вашей переменной, если это указатель. Также я не понял тип" bot " и " location " Я думаю, что вы имели в виду " struct Human " not " struct bot " и " structWorld"not" struct location"Вы можете назвать свою структуру, чтобы вам не приходилось писать struct при каждом объявлении

struct World{
//variables
}World;

И затем struct World было бы то же самое, что просто сказать World

...