MSCV 中的 C++ wclen
C++ wclen in MSCV
我使用 wcslen
来确定以 null 结尾的宽字符串 (wchar_t*
) 的长度,但是我在 MSVC 编译器中使用这个函数有一些问题
代码示例:
#include <iostream>
#include <cstring>
#include <cwchar>
int main()
{
auto sc = "The good and bad";
auto wsc = L"Уставший лесник";
auto ws = std::wstring(wsc);
std::cout << "sc len:" << std::strlen(sc) << std::endl;
std::cout << "wsc len:" << std::wcslen(wsc) << std::endl;
std::cout << "ws len:" << ws.length() << std::endl;
}
MSVC (amd64 16.8.2 x64) 输出:
sc len:16
wsc len:29
ws len:29
Clang(10.0.0 (GNU CLI) for MSVC 16.8.30717.126)输出:
sc len:16
wsc len:15
ws len:15
是否是 MSVC 编译器的问题,一些未定义的行为或 MSVC 实现的细微差别?
您需要将文件保存为带 BOM 的 UTF-16 或 UTF-8。 MSVC 似乎无法处理没有 BOM 的 UTF-8 文件(这是可以理解的,因为此类文件的字符编码是一个解释问题)。
一些编辑器(我使用的是 Notepad2)称此为 'UTF-8 with signature'。
我使用 wcslen
来确定以 null 结尾的宽字符串 (wchar_t*
) 的长度,但是我在 MSVC 编译器中使用这个函数有一些问题
代码示例:
#include <iostream>
#include <cstring>
#include <cwchar>
int main()
{
auto sc = "The good and bad";
auto wsc = L"Уставший лесник";
auto ws = std::wstring(wsc);
std::cout << "sc len:" << std::strlen(sc) << std::endl;
std::cout << "wsc len:" << std::wcslen(wsc) << std::endl;
std::cout << "ws len:" << ws.length() << std::endl;
}
MSVC (amd64 16.8.2 x64) 输出:
sc len:16
wsc len:29
ws len:29
Clang(10.0.0 (GNU CLI) for MSVC 16.8.30717.126)输出:
sc len:16
wsc len:15
ws len:15
是否是 MSVC 编译器的问题,一些未定义的行为或 MSVC 实现的细微差别?
您需要将文件保存为带 BOM 的 UTF-16 或 UTF-8。 MSVC 似乎无法处理没有 BOM 的 UTF-8 文件(这是可以理解的,因为此类文件的字符编码是一个解释问题)。
一些编辑器(我使用的是 Notepad2)称此为 'UTF-8 with signature'。