Сравните равенство char [] в C
27918 просмотра
5 ответа
У меня есть две переменные:
char charTime[] = "TIME";
char buf[] = "SOMETHINGELSE";
Я хочу проверить, равны ли эти два ... использование charTime == buf
не работает.
Что я должен использовать, и кто-то может объяснить, почему использование ==
не работает?
Будет ли это действие отличаться в C и C ++?
Автор: rksprst Источник Размещён: 13.11.2019 11:45Ответы (5)
20 плюса
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);
Использование ==
не работает, потому что он пытается сравнить адреса первого символа каждого массива (очевидно, они не равны). Он не будет сравнивать содержимое обоих массивов.
2 плюса
В c вы можете использовать функцию strcmp из string.h, она возвращает 0, если они равны
#include <string.h>
if( !strcmp( charTime, buf ))
Автор: zellio
Размещён: 13.03.2010 11:13
1 плюс
В выражении, использующем ==
имена char
массивов, переходят char*
в начало соответствующих им массивов. Затем выполняется сравнение с точки зрения значений самих указателей, а не фактического содержимого массивов.
==
вернет true только для двух указателей, указывающих на одно и то же местоположение, и false в противном случае, даже если они указывают на два массива с одинаковым содержимым.
Что вам нужно, так это стандартная библиотечная функция strcmp
. Это выражение оценивается как true, если массивы содержат одинаковое содержимое (вплоть до завершающего нулевого символа, который должен присутствовать в обоих массивах strcmp
для безопасной работы).
strcmp(charTime, buf) == 0
Автор: CB Bailey
Размещён: 13.03.2010 11:16
0 плюса
Проверьте их в цикле for. Получите числа ASCII для каждого символа, когда они меняются, они не равны.
Автор: anon235370 Размещён: 13.03.2010 11:110 плюса
Вы проверяете личность charTime
и buf
. Чтобы проверить равенство, выполните цикл по каждому символу в одном массиве и сравните их со связанным символом в другом массиве.
Вопросы из категории :
- c++ What are the barriers to understanding pointers and what can be done to overcome them?
- c++ Какой самый простой способ для анализа файла INI в C ++?
- c++ Когда вы должны использовать «друг» в C ++?
- c++ Как вы очищаете переменную stringstream?
- c++ В C ++ конструктор и деструктор могут быть встроенными функциями?
- c++ Что такое виртуальный базовый класс в C ++?
- c Как вы форматируете unsigned long long int, используя printf?
- c Как реализовать продолжения?
- c Как вы передаете функцию в качестве параметра в C?
- c Как получить список каталогов в C?
- c В чем разница между #include <filename> и #include "filename"?
- equality Comparing two collections for equality irrespective of the order of items in them
- equality Чем отличаются операторы сравнения PHP (== double equals) и тождества (=== triple equals)?
- equality Что такое «Лучшая практика» для сравнения двух экземпляров ссылочного типа?
- equality Есть ли разница между "==" и "есть"?
- equality Какой оператор равенства (== vs ===) следует использовать в сравнениях JavaScript?
- equality Элегантные способы поддержки эквивалентности («равенства») в классах Python