小编zed*_*d91的帖子

如何将wchar_t值打印到控制台?

例:

#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字符串?

c++ string wchar-t unicode-string

66
推荐指数
3
解决办法
7万
查看次数

9
推荐指数
1
解决办法
4786
查看次数

模板化代码如何在C++中找到类型为模板参数的字符串的长度?

考虑以下代码:

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*)'

我的问题是,我如何使用这些功能strlenwcslen模板?

c++ templates

3
推荐指数
2
解决办法
742
查看次数

标签 统计

c++ ×3

arguments ×1

function ×1

string ×1

templates ×1

unicode-string ×1

wchar-t ×1