C:指针结构比较不起作用



我应该在不使用strcmp((的情况下将一个指令与另一个指令进行比较。但是每当两边的firstName相同时,它就不会进入if函数。我知道函数在打印中得到了名称bc,如果我能清楚地看到这些名称。

typedef struct{
char firstName[MAXC];
char familyName[MAXC];
char gender;
} TPerson;
....
int comparePeopleByFirstName(TPerson *a, TPerson *b){
if(a->firstName == b->firstName){
if(a->familyName < b->familyName){
return 1;
} else if (a->familyName > b->familyName){
return -1;
}
}else if(a->firstName < b->firstName){
return 1;
} else if (a->firstName > b->firstName){
return -1;
}
return 0;
}

在示例代码中,结构包含数组作为成员,而不是指针。因此,(a != b) && (a->firstName == b->firstname)a->firstNameb->firstname内容是否匹配并不重要,因为您正在比较它们的第一个元素的addresses

可以想象,您可以使用memcmp()而不是strcmp()来执行比较,前提是您也不介意比较任何字符串终止符之后的数据。但也许那是欺骗。

如果不能使用任何库函数,则需要将charchar与循环进行比较。例如,

_Bool equal = 0;
for (int i = 0; ; ++i) {
if (a->firstName[i] != b->firstName[i]) {
// unequal
break;
}
if (a->firstName[i] == '') {
// b->firstName[i] == '' too, else control would not reach this point
equal = 1;
break;
}
}

它假定字符串终止正确。如果这不是一个安全的假设,那么您可以在循环的终止条件中添加对i的限制。

最新更新