9

Is it advisable to use strcmp or _tcscmp for comparing strings in Unicode versions?

Ricardo Altamirano
  • 14,650
  • 21
  • 72
  • 105
ckv
  • 10,539
  • 20
  • 100
  • 144

2 Answers2

11

_tcscmp() is a macro. If you define UNICODE it will use wcscmp(), otherwise it will use strcmp().

Note the types TCHAR, PTSTR, etc. are similar. They will be WCHAR and PWSTR if you define UNICODE, and CHAR and PSTR otherwise.

asveikau
  • 39,039
  • 2
  • 53
  • 68
  • 8
    That is incorrect. `UNICODE` drives the definition of wide character string in the Win32 API. i.e when you `#include `. `_UNICODE` drives the c-runtimes support for wide (and multi byte) characters, and has meaning when you `#include ` (or any of the other c-runtime headers). If `_UNICODE` is defined, `_tcscmp` will be `wcscmp`, else if `_MBCS` is defined, `_tcscmp` will be `_mbcscmp`, else it will be `strcmp`. – Chris Becke Jan 26 '10 at 19:24
  • @Chris Becke Hm, I did not know that. I usually define both (with leading underscore and without), and now it makes sense why that's necessary. :-) – asveikau Jan 26 '10 at 21:52
7

No, you should use _tcscmp . That will resolve to proper function depending upon on your compiler flags.

Naveen
  • 74,600
  • 47
  • 176
  • 233