我应该在不使用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->firstName
和b->firstname
的内容是否匹配并不重要,因为您正在比较它们的第一个元素的addresses。
可以想象,您可以使用memcmp()
而不是strcmp()
来执行比较,前提是您也不介意比较任何字符串终止符之后的数据。但也许那是欺骗。
如果不能使用任何库函数,则需要将char
与char
与循环进行比较。例如,
_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
的限制。