std::wmemcpy(3)

๐Ÿ“ฆ version 2024.07.05, in nixpkgs unstable, opensuse-leap 16.0

๐Ÿ’… NAME ๐Ÿ’…

Okay so this is the manual page for std::wmemcpy(3) from the C++ Standard Libary (yes, that's the typo in the header, and we're leaving it ๐Ÿ’€). The function is std::wmemcpy โ€” NAME literally says std::wmemcpy - std::wmemcpy, which is giving "I have one job and it's copying wide characters" energy. Periodt.


๐ŸŒธ Synopsis ๐ŸŒธ

Defined in header <cwchar>:

Defined in header <cwchar>
wchar_t* wmemcpy( wchar_t* dest, const wchar_t* src, std::size_t count );

It copies exactly count successive wide characters from the wide character array pointed to by src to the wide character array pointed to by dest. If the objects overlap, the behavior is undefined โ€” like, not "maybe weird", actually undefined, bestie ๐Ÿ˜ญ. If count is zero, the function does nothing. Zero. Nada. It simply vibes.

๐ŸŽ€ Parameters ๐ŸŽ€

  • dest โ€” pointer to the wide character array to copy to ๐Ÿซถ
  • src โ€” pointer to the wide character array to copy from โœจ
  • count โ€” number of wide characters to copy ๐Ÿ”ข

๐Ÿ’– Return value ๐Ÿ’–

dest โ€” that's it. That's the whole return value. Iconic, honestly.

๐Ÿฆ‹ Notes ๐Ÿฆ‹

This function's analog for byte strings is std::strncpy, not std::strcpy โ€” not me stressing this difference, but here we are ๐Ÿ’….

This function is not locale-sensitive and pays no attention to the values of the wchar_t objects it copies: nulls as well as invalid characters are copied too. It's not judging, it's just copying, no cap.

โœจ Example โœจ

// Run this code

#include <clocale>
#include <cwchar>
#include <iostream>
#include <iterator>
#include <locale>

int main(void)
{
    const wchar_t from1[] = L"เคจเคฎเคธเคค";
    const wchar_t from2[] = L"ิฒีกึ€ึ‡";
    const std::size_t sz1 = std::size(from1);
    const std::size_t sz2 = std::size(from2);
    wchar_t to[sz1 + sz2];

    std::wmemcpy(to, from1, sz1); // copy from1, along with its null terminator
    std::wmemcpy(to + sz1, from2, sz2); // append from2, along with its null terminator

    std::setlocale(LC_ALL, "en_US.utf8");
    std::wcout.imbue(std::locale("en_US.utf8"));
    std::wcout << L"Wide array contains: ";
    for (std::size_t n = 0; n < std::size(to); ++n)
        if (to[n])
            std::wcout << to[n];
        else
            std::wcout << L"\\0";
    std::wcout << L'\n';
}

๐ŸŒˆ Possible output ๐ŸŒˆ

Wide array contains: เคจเคฎเคธเคค\0ิฒีกึ€ึ‡\0

๐Ÿ‘‘ See also ๐Ÿ‘‘

  • strncpy โ€” copies a certain amount of characters from one string to another (function) ๐ŸŽ€
  • wmemmove โ€” copies a certain amount of wide characters between two, possibly overlapping, arrays (function) ๐Ÿฆ‹
  • C documentation for wmemcpy ๐Ÿ“š

Signed with sparkles and zero overlap, bestie ๐Ÿ’Œ โ€” source: http://cppreference.com, version/date: 2024.06.10, manual page: std::wmemcpy(3). Mwah! ๐Ÿ’‹

๐Ÿ“ฆ where this page comes from