Xi Xu's More Things

wmemmove, wmemmove_s

来自cppreference.com
< c‎ | string‎ | wide
 
 
 
空终止宽字符串
函数
字符操作
(C95)
(C95)
(C95)
(C95)
(C95)
(C95)
(C99)
(C95)
(C95)
(C95)
(C95)
(C95)
(C95)
(C95)
(C95)
(C95)
(C95)
(C95)
转换成数值格式
(C95)(C99)
(C95)(C99)
(C99)(C95)(C99)
(C99)(C99)
字符串操作
(C95)(C11)
(C95)(C11)
(C95)(C11)
(C95)(C11)
(C95)(C11)
(C95)
(C95)
(C95)
(C95)
(C95)
(C95)
(C95)
(C95)
(C95)
(C95)
(C95)(C11)
数组操作
(C95)(C11)
wmemmovewmemmove_s
(C95)(C11)
(C95)
(C95)
(C95)
 
在标头 <wchar.h> 定义
wchar_t* wmemmove( wchar_t* dest, const wchar_t* src, size_t count );
(1) (C95 起)
errno_t wmemmove_s( wchar_t *dest, rsize_t destsz,
                    const wchar_t *src, rsize_t count);
(2) (C11 起)
1) 准确地从 src 所指向的宽字符数组复制 count 个相继的宽字符到 dest 所指向的宽字符数组。若 count 为零,则函数不做任何事。数组可以重叠:如同复制宽字符到临时宽字符数组,再从临时数组到 dest 一般发生复制。
2)(1) ,除了在运行时检测下列错误,并调用当前安装的约束处理函数:
  • srcdest 为空指针
  • destszcount 大于 RSIZE_MAX/sizeof(wchar_t)
  • count 大于 destsz (会出现溢出)
同所有边界检查函数, wmemmove_s 仅若实现定义了 __STDC_LIB_EXT1__ ,且用户在包含 wchar.h 前定义 __STDC_WANT_LIB_EXT1__ 为整数常量 1 才保证可用。

参数

dest - 指向复制目标宽字符数组的指针
src - 指向复制来源宽字符数组的指针
destsz - 写入的最大宽字符数(目标缓冲区大小)
count - 要复制的宽字符数

返回值

1) 返回 dest 的副本。
2) 成功时返回零,错误时返回非零。而且在错误时,以空宽字符 L'\0' 填充整个 dst ,直到且不包含 dst+dstsz (除非 dest 为空或 destsz 大于 RSIZE_MAX/sizeof(wchar_t)

注意

此函数不考虑本地环境,并且不注意其所复制的 wchar_t 对象的值:亦会复制空字符和非法字符。

示例

#include <stdio.h>
#include <wchar.h>
#include <locale.h>
 
int main(void)
{
    setlocale(LC_ALL, "en_US.utf8");
 
    wchar_t str[] = L"αβγδεζηθικλμνξοπρστυφχψω";
    printf("%ls\n", str);
    wmemmove(str+4, str+3, 3); // 从 [δεζ] 复制到 [εζη]
    printf("%ls\n", str);
}

输出:

αβγδεζηθικλμνξοπρστυφχψω
αβγδδεζθικλμνξοπρστυφχψω

引用

  • C11 标准(ISO/IEC 9899:2011):
  • 7.29.4.2.4 The wmemmove function (第 432 页)
  • K.3.9.2.1.4 The wmemmove_s function (第 642 页)
  • C99 标准(ISO/IEC 9899:1999):
  • 7.24.4.2.4 The wmemmove function (第 378 页)

参阅

将一个缓冲区移动到另一个
(函数)
(C95)(C11)
在两个不重叠的数组间复制一定数量的宽字符
(函数)