Я знаю, что правильный способ сравнения «строк» в C заключается в использовании strcmp
, но теперь я попытался сравнить некоторые массивы символов с оператороми получил некоторые странные результаты.Сравнение массивов символов с оператором == в C
Взгляните на следующий код:
int main()
{
char *s1 = "Andreas";
char *s2 = "Andreas";
char s3[] = "Andreas";
char s4[] = "Andreas";
char *s5 = "Hello";
printf("%d\n", s1 == s2); //1
printf("%d\n", s3 == s4); //0
printf("%d\n", s1 == s5); //0
}
Первый
printf
правильно печатает
1
, который сигнализирует о том, что они не равны. Но может кто-нибудь объяснить мне, почему, сравнивая массивы символов,
==
возвращает
0
?
Может кто-то пожалуйста, объясни мне, почему первый printf
возвращается 1
(т.е. они равны), а массивы символов возвращают 0
?
Вы должны явно передать результат сравнения в int. Поскольку вы используете% d, printf будет искать размер int (часто 4 байта) в стеке, но bool обычно составляет 1 байт. –
Bipedal: правила продвижения C для функций vararg отлично справляются с этим, и что заставляет вас думать, что '==' приводит к bool вместо int в любом случае? : P –
Согласно правилам преобразования vararg, 'bool' будет неявно повышаться до' int' при использовании в качестве аргумента vararg - см. 5.2.2 [expr.call]/7 и 4.5 [conv.prom]/4. –