wprintf(L"%s\n", (LPCWSTR)cstring); // Okay. It's been cast to a const wchar_t*.
wprintf(L"%s\n", cstring); // UNDEFINED BEHAVIOUR
wprintf(L"%s\n", (LPCWSTR)s); // Okay, it's a const wchar_t*.
wprintf(L"%s\n", s); // UNDEFINED BEHAVIOUR
То, что * можно передать этой функции для %s
, это const wchar_t*
. Все остальное - неопределенное поведение. Передача CString просто работает.
Есть причина, по которой iostream
был разработан в C ++, и это потому, что эти функции с переменными аргументами ужасно небезопасны и никогда не должны использоваться. Да, и CString также является грехом по многим причинам, придерживайтесь std::wstring
и cout
/ wcout
, где вы можете.