When you build an app on Windows using TCHAR
support, %s
in _tprintf()
means char *
string for Ansi builds and wchar_t *
for Unicode builds while %S
means the reverse.
But are there any format specifiers that always mean char *
string no matter if it's an Ansi or Unicode build? Since even on Windows UTF-16 is not really used for files or networking it turns out to still be fairly often that you'll want to deal with byte-based strings regardless of the native character type you compile your app as.
The h
modifier forces both %s
and %S
to char*
, and the l
modifier forces both to wchar_t*
, ie: %hs
, %hS
, %ls
, and %lS
.