例:
#include <iostream>
using namespace std;
int main()
{
wchar_t en[] = L"Hello";
wchar_t ru[] = L"??????"; //Russian language
cout << ru
<< endl
<< en;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
此代码仅打印像地址一样的十六进制值.如何打印wchar_t字符串?
考虑以下代码:
template <typename T>
class String
{
public:
...
String(T* initStr)
{
size_t initStrLen;
if (initStr != NULL)
{
printf_s("%s\n", typeid(T) == typeid(char) ? "char" : "wchar_t");
if (typeid(T) == typeid(char))
{
strlen((T*)initStr);
}
else if (typeid(T) == typeid(wchar_t))
{
wcslen((T*)initStr);
}
}
}
...
};
Run Code Online (Sandbox Code Playgroud)
当我编译代码时,我收到此错误消息:
...\main.cpp(32):错误C2664:'strlen':无法将参数1从'wchar_t*'转换为'const char*'
然后我尝试使用函数指针:
typedef size_t (*STRLEN)(void*);
STRLEN _strlen;
_strlen = reinterpret_cast<STRLEN> (typeid(*initStr) == typeid(char) ? strlen : wcslen);
Run Code Online (Sandbox Code Playgroud)
并且编译器再次发出错误,这次:
...\main.cpp(28):错误C2446:':':没有从'size_t(__ cdecl*)(const wchar_t*)'转换为'size_t(__ cdecl*)(const char*)'
我的问题是,我如何使用这些功能strlen
和wcslen
模板?