Вопрос:

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

c++ c equality

27918 просмотра

5 ответа

3066 Репутация автора

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

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

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

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

Будет ли это действие отличаться в C и C ++?

Автор: rksprst Источник Размещён: 13.03.2010 11:10

Ответы (5)


0 плюса

0 Репутация автора

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

Автор: anon235370 Размещён: 13.03.2010 11:11

20 плюса

423932 Репутация автора

Решение
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);

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

Автор: Johannes Schaub - litb Размещён: 13.03.2010 11:13

2 плюса

19584 Репутация автора

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

#include <string.h>

if( !strcmp( charTime, buf ))
Автор: zellio Размещён: 13.03.2010 11:13

0 плюса

782 Репутация автора

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

Автор: lajuette Размещён: 13.03.2010 11:13

1 плюс

558764 Репутация автора

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

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

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

strcmp(charTime, buf) == 0
Автор: CB Bailey Размещён: 13.03.2010 11:16
Вопросы из категории :
32x32