Независимо от случая за или против ^^
как оператора, вы, например, с strcmp()
отстой. Он не возвращает истинное значение (истина или ложь), он возвращает отношение между своими входами, закодированное как целое число.
Конечно, любое целое число можно интерпретировать как истинное значение в C, в этом случае 0 равно «false», а все остальные значения «true», но это противоположно тому, что возвращает strcmp()
.
Ваш пример должен начаться:
int a = strcmp(str1, str2) == 0; // evaluates to 0, which is "false"
int b = strcmp(str1, str3) == 0; // evaluates to 0, which is also "false"
Вы должны сравнить возвращаемое значение с 0, чтобы преобразовать его в правильное логическое значение, указывающее, были ли строки равными или нет.
С "правильными" логическими значениями, канонически представленными как 0 или 1, побитовый оператор ^
также работает намного лучше ...