class MyString { public: MyString(const std::wstring& s2) { s = s2; } operator LPCWSTR() const { return s.c_str(); } private: std::wstring s; }; int _tmain(int argc, _TCHAR* argv[]) { MyString s = L"MyString"; CStringW cstring = L"CString"; wprintf(L"%s\n", (LPCWSTR)cstring); // Okay. Becase it has an operator LPCWSTR() wprintf(L"%s\n", cstring); // Okay, fine. But how? wprintf(L"%s\n", (LPCWSTR)s); // Okay. fine. wprintf(L"%s\n", s); // Doesn't work. Why? It prints gabage string like "?." return 0; }
Как передать CString в строку формата% s?
Кстати, MSDN говорит (это странно)
Использование объекта CString в функции переменного аргумента
Явно приведите CString к строке LPCTSTR, как показано здесь:CString kindOfFruit = "bananas"; int howmany = 25; printf( "You have %d %s\n", howmany, (LPCTSTR)kindOfFruit );