Сравните равенство символа [] в C

У меня есть две переменные:

char charTime[] = "TIME";
char buf[] = "SOMETHINGELSE";

Я хочу проверить, равны ли эти два... использование charTime == buf не работает.

Что должно я использовать, и может кто-то объяснять почему использование == не работает?

Это действие отличалось бы в C и C++?

10
задан Lazer 14 March 2010 в 06:30
поделиться

5 ответов

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);

Использование == не работает, потому что он пытается сравнить адреса первого символа каждого массива (очевидно, они не равны). Он не будет сравнивать содержимое обоих массивов.

20
ответ дан 3 December 2019 в 17:19
поделиться

В c вы можете использовать функцию strcmp из string.h, она возвращает 0, если они равны

#include <string.h>

if( !strcmp( charTime, buf ))
2
ответ дан 3 December 2019 в 17:19
поделиться

Проверить их в цикле for. Получите номера ASCII для каждого символа после их изменения, когда они не равны.

0
ответ дан 3 December 2019 в 17:19
поделиться

Вы проверяете идентификатор charTime и buf . Чтобы проверить равенство, переберите каждый символ в одном массиве и сравните их со связанным символом в другом массиве.

0
ответ дан 3 December 2019 в 17:19
поделиться

В выражении, использующем == , имена массивов char распадаются на char * , указывающие на начало соответствующих массивов. Затем сравнение выполняется с точки зрения значений самих указателей, а не фактического содержимого массивов.

== вернет только true для двух указателей, указывающих на одно и то же место, и false в противном случае, даже если они указывают на два массива с одинаковым содержимым.

Вам нужна стандартная библиотечная функция strcmp . Это выражение считается истинным, если массивы содержат одинаковое содержимое (вплоть до завершающего нулевого символа, который должен присутствовать в обоих массивах для strcmp для безопасной работы).

strcmp(charTime, buf) == 0
1
ответ дан 3 December 2019 в 17:19
поделиться