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'。