非常教程

C参考手册

字符串 | Strings

wmemcpy_s

在头文件<wchar.h>中定义

(1)

wchar_t * wmemcpy(wchar_t * dest,const wchar_t * src,size_t count);

(自C95以来)(直到C99)

wchar_t * wmemcpy(wchar_t * restrict dest,const wchar_t * restrict src,size_t count);

(自C99以来)

errno_t wmemcpy_s(wchar_t * restrict dest,rsize_t destsz,const wchar_t * restrict src,rsize_t count);

(2)

(自C11以来)

1)count将由src指向的宽字符数组中的完全连续的宽字符复制到指向的宽字符数组dest。如果对象重叠,则行为未定义。如果count为零,则该功能不执行任何操作。

2)与(1)相同,只是在运行时检测到以下错误并调用当前安装的约束处理函数:

  • src或者dest是空指针
  • destszcount大于RSIZE_MAX/sizeof(wchar_t)
  • count大于destsz(会发生溢出)
  • 源和目标阵列之间会发生重叠

作为所有边界检查函数,wmemcpy_s只有在被__STDC_LIB_EXT1__实现定义__STDC_WANT_LIB_EXT1__并且1在包含之前用户定义为整数常量时才能保证可用wchar.h

参数

dest

-

指向要复制到的宽字符数组的指针

src

-

指向要复制的宽字符数组的指针

count

-

要复制的宽字符数

destsz

-

要写入的最大宽字符数(目标缓冲区的大小)

返回值

1)返回一份副本 dest

2)在成功时返回零,错误时返回非零值。此外,在错误,填满整个dst直至并包括不dst+dstsz具有空宽字符,L'\0'(除非dest为空或destsz大于RSIZE_MAX/sizeof(wchar_t)

注意

这个函数对字节串的模拟strncpy不是strcpy

该函数不区分语言环境,不关注wchar_t其复制的对象的值:复制空值以及无效字符。

示例

#include <stdio.h>
#include <wchar.h>
#include <locale.h>
 
int main(void)
{
    wchar_t from1[] = L"नमस्ते";
    size_t sz1 = sizeof from1 / sizeof *from1;
    wchar_t from2[] = L"Բարև";
    size_t sz2 = sizeof from2 / sizeof *from2;
    wchar_t to[sz1 + sz2];
    wmemcpy(to, from1, sz1); // copy from1, along with its null terminator
    wmemcpy(to + sz1, from2, sz2); // append from2, along with its null terminator
 
    setlocale(LC_ALL, "en_US.utf8");
    printf("Wide array contains: ");
    for(size_t n = 0; n < sizeof to / sizeof *to; ++n)
        if(to[n])
            printf("%lc", to[n]);
        else
            printf("\\0");
    printf("\n");
}

可能的输出:

Wide array contains: नमस्ते\0Բարև\0

参考

  • C11标准(ISO/IEC 9899:2011):
    • 7.29.4.2.3 wmemcpy函数(p: 431)
    • K.3.9.2.1.3 wmemcpy_s函数(p: 641)
  • C99标准(ISO/IEC 9899:1999):
    • 7.24.4.2.3 wmemcpy函数(p: 377)

另请参阅

wmemmovewmemmove_s(C95)(C11)

在两个可能重叠的数组之间复制一定数量的宽字符(函数)

strncpystrncpy_s(C11)

将一定数量的字符从一个字符串复制到另一个字符串(函数)

| C ++文档wmemcpy |

C

C 语言是一门通用计算机编程语言,应用广泛。C 语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。