当前位置: C语言 -- 附录 -- wmemmove_s

wmemmove_s函数


概要:
#define __STDC_WANT_LIB_EXT1__ 1
#include <wchar.h>
errno_t wmemmove_s(wchar_t *s1, rsize_t s1max, 
      const wchar_t *s2, rsize_t n);

描述:

该函数从参数s2指向的对象复制n个连续宽字符到参数s1指向的对象。

整个复制过程就像先从参数s2指向的对象将n个宽字符复制到一个临时数组(该临时数组与参数s1s2指向的对象均不重叠。),然后再从临时数组将n个宽字符复制到参数s1指向的对象。参数s1s2指向的对象可以重叠。


运行约束:

参数s1和参数s2不能是空指针。参数s1max和参数n应不大于RSIZE_MAX/sizeof(wchar_t)。参数n应不大于参数s1max

在存在运行约束冲突的情况下,如果参数s1不是空指针并且参数s1max不大于RSIZE_MAX/sizeof(wchar_t),函数将向参数s1指向对象的前s1max个宽字符存储0


参数:
wchar_t *s1

指向目标对象的指针,复制的内容将存入该对象。

rsize_t s1max

目标对象中修改的最大宽字符数。

const wchar_t *s2

指向源对象的指针,将从该对象中复制内容。

rsize_t n

复制的宽字符数。


返回值:

如果不存在运行约束冲突,函数返回0;否则函数返回非0值。


范例:
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
/*安全函数wmemmove_s范例*/

#define __STDC_WANT_LIB_EXT1__ 1
#include <locale.h>
#include <wchar.h>

int main(void)
{
    setlocale(LC_ALL, "");
    
    wchar_t wStr[] = L"万般皆下品,唯有读书高!";

    if(!(wmemmove_s(wStr, (wcslen(wStr) + 1), (wStr + 6), (wcslen(wStr) - 6 + 1))))
    {
        wprintf_s(L"%ls\n", wStr);
    }
    
    return 0;
}


输出:

唯有读书高!

注:使用Visual Studio编译。


相关内容:
wmemcpy_s 复制内存区域宽字符序列的安全函数。
wcscpy_s 复制宽字符串的安全函数。
wcsncpy_s 从宽字符串中复制限定数量宽字符的安全函数。