У меня есть две переменные:
char charTime[] = "TIME";
char buf[] = "SOMETHINGELSE";
Я хочу проверить, равны ли эти два... использование charTime == buf
не работает.
Что должно я использовать, и может кто-то объяснять почему использование ==
не работает?
Это действие отличалось бы в C и C++?
char charTime[] = "TIME"; char buf[] = "SOMETHINGELSE";
C ++ и C (удалить std ::
для C):
bool equal = (std::strcmp(charTime, buf) == 0);
Но истинный способ C ++:
std::string charTime = "TIME", buf = "SOMETHINGELSE";
bool equal = (charTime == buf);
Использование ==
не работает, потому что он пытается сравнить адреса первого символа каждого массива (очевидно, они не равны). Он не будет сравнивать содержимое обоих массивов.
В c вы можете использовать функцию strcmp из string.h, она возвращает 0, если они равны
#include <string.h>
if( !strcmp( charTime, buf ))
Проверить их в цикле for. Получите номера ASCII для каждого символа после их изменения, когда они не равны.
Вы проверяете идентификатор charTime
и buf
. Чтобы проверить равенство, переберите каждый символ в одном массиве и сравните их со связанным символом в другом массиве.
В выражении, использующем ==
, имена массивов char
распадаются на char *
, указывающие на начало соответствующих массивов. Затем сравнение выполняется с точки зрения значений самих указателей, а не фактического содержимого массивов.
==
вернет только true для двух указателей, указывающих на одно и то же место, и false в противном случае, даже если они указывают на два массива с одинаковым содержимым.
Вам нужна стандартная библиотечная функция strcmp
. Это выражение считается истинным, если массивы содержат одинаковое содержимое (вплоть до завершающего нулевого символа, который должен присутствовать в обоих массивах для strcmp
для безопасной работы).
strcmp(charTime, buf) == 0