我有一个结构体
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,我如何比较不同结构中的两个字符?
代码中的问题不是strcmp,而是空指针,这意味着变量">b"==NULL,所以">b"没有">location"属性,这就是NullPointerException生成的地方。 我可能会建议检查如何将参数传递给函数 使用&传递变量的地址(指针(,或者只是传递变量的名称(如果它是指针( 我也不明白">机器人"和">位置"的类型 我想你的意思是"结构人类"而不是"结构机器人"和"结构世界"而不是">结构位置">您可以命名结构,这样就不必在每个声明中编写结构
struct World{
//variables
}World;
然后结构世界将和只说世界一样
问题不在于你的字符串比较,而在于你如何声明你的结构。
您似乎正在使用(结构机器人*(来引用(结构人类(。 在这种情况下,它应该看起来:
int compareWeapons(struct World *b, int whattoget);
此外,必须初始化结构位置,否则将引用不包含任何内容 (NULL( 的结构。
struct location
{
//your struct variables
};
下面是有关如何初始化结构的基本示例的链接,https://www.cs.usfca.edu/~wolber/SoftwareDev/C/CStructs.htm