Вы сравниваете адреса контейнера данных, которые являются str1 и str2, если вы знаете java, то есть метод equals и метод contentEquals, если вы используете метод equals, он сравнивает ссылки на объекты, но если вы делаете contentEquals, он сравнивает содержимое (данные) находятся в объектах.
В c вы должны были уже знать, что имя строки содержит базовый адрес. Вот почему вам не нужно вводить &(address of operator) while using the scanf
, это главная причина, когда вы вводите str1==str2
, он сравнивает адрес, а не данные внутри строки.
В c str1 и str2 представляют собой просто двухсимвольный массив с \0
в конце. Теперь, когда вы делаете
if(str1==str2) //it compares the address of
//variables not the content as
//you are comparing the base address
//of the strings str1 and str2.
Правильная версия должна быть:
#include <stdio.h>
#include <string.h>
int main()
{
char str1[]="hello";
char str2[]="hello";
if(strcmp(str1, str2) == 0)
puts("equal");
else
puts("unequal");
return 0;
}
Если вы хотите убедиться, что можете использовать это, printf(“%d”, &str1); printf(“%d”, &str2);
они оба не будут равны.
Возможный дубликат Как сравнить указатель со строками в C