我有一个结构
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'
的空指针
请告诉我,如果不使用strcmp,我如何比较不同结构中的两个char?
答案 0 :(得分:0)
你的代码中的问题不是strcmp而是空指针,这意味着变量" b " == NULL,所以" b 强>"没有" 位置"属性以及 NullPointerException 生成的位置。 我可能会建议您检查如何将参数传递给函数 如果它是指针,请使用& 传递变量的地址(指针)或仅传递变量的名称 此外,我还没有理解类型" bot "和" 位置" 我认为你的意思是" struct Human "不是" struct bot "和" struct World "不是" 结构位置" 您可以命名您的结构,这样您就不必在每个声明中编写结构
WorkManager
然后 struct World 就像说世界
一样答案 1 :(得分:0)
问题不在于您的字符串比较,而是您声明结构的方式。
您似乎正在使用(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