-3

Код:

char *CPFC = TEXT("C:\\Users\\Vasja-PC\\source\\repos\\Test\\Release\\Test.exe");
char CFP[128];
GetModuleFileName(NULL, CFP, 128);
if (CFP == CPFC) printf("Good!");

При данном сравнение сообщения Good! я не получаю, хотя при попытке сравнить 2 строки прямо в if то данное сообщение выводится. Это проблема точно не связана с неравенством строк, так как я вывел обе строки и они были полностью идентичны.

Aleksei .C
  • 389
  • 2
  • 17
  • Во-первых, нуль-терминированные строки в С и С++ не сравниваются и никогда не сравнивались оператором ==. if здесь ни при чем. Во-вторых, если тип строки у вас прошит жестко - массив char, то что здесь делает макро TEXT? С какой целью вы использовали этот TEXT? – AnT stands with Russia Sep 14 '17 at 15:03
  • А как тогда их сравнить? – Aleksei .C Sep 14 '17 at 15:03
  • 2
    strcmp всегда было. – AnT stands with Russia Sep 14 '17 at 15:04

1 Answers1

2

Сравнение строк в C++:

if (strcmp(CFP, CFPC) == 0)

Внимание:

При неподходящем использовании результата сравнения как булевого значения, т.е. в форме if (strcmp(CFP, CFPC)) (без сравнения с нулем), возникнет путаница, потому что когда строки идентичны, результат функции strcmp() будет 0, что интерпретируется как неправда и код в ветви if не выполнится.

MarianD
  • 17,120
  • 4
    Результат функции strcmp - это не "правда/неправда", а многозначное целочисленное значение. Поэтому использование strcmp (включая популярный уродливый антипаттерн !strcmp) без явного сравнения - дурная практика. – AnT stands with Russia Sep 14 '17 at 15:15
  • @AnT - Я писал 0 - неправда только в скобках. – MarianD Sep 14 '17 at 17:09
  • @MarianD, strcmp возвращает не булевое значение (0 или 1), а -1, 0, +1 в зависимости от того, меньше левая строка правой, равна или больше (меньше-больше - в смысле лексикографического порядка). "Неправда" тут вообще ни при чем. – insolor Sep 14 '17 at 17:21
  • @insolor - Смотри мой прежний комментарий. В контексте моего ответа результат в частности правда или неправда. – MarianD Sep 14 '17 at 17:41
  • @MarianD, что прежний, что нынешний - это набор малосвязанных слов. strcmp не возвращает правду-неправду, хоть в скобках, хоть без. – insolor Sep 14 '17 at 17:43