非常教程

C参考手册

字符串 | Strings

wcscpy

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

(1)

wchar_t * wcscpy(wchar_t * dest,const wchar_t * src);

(自C95以来)(直到C99)

wchar_t * wcscpy(wchar_t * restrict dest,const wchar_t * restrict src);

(自C99以来)

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

(2)

(自C11以来)

1)将指向的宽字符串src(包括终止空宽字符)复制到指向的宽字符数组dest。如果dest数组不够大,行为是不确定的。如果字符串重叠,则行为未定义。

2)与(1)相同,除了可以用未指定的值来摧毁目标数组的其余部分,并且在运行时检测到以下错误并调用当前安装的约束处理函数:

  • src或者dest是空指针
  • destsz 是零或大于 RSIZE_MAX / sizeof(wchar_t)
  • destsz是小于或等于wcsnlen_s(src, destsz),换句话说,会发生截断
  • 源和目标字符串之间会发生重叠

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

参数

dest

-

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

src

-

指向要从中复制的以空字符结尾的宽字符串

destsz

-

最大写入字符数,通常是目标缓冲区的大小

返回值

1)返回一份副本 dest

2)在成功时返回零,错误时返回非零值。此外,在错误,写入L'\0'dest[0](除非dest是空指针或destsz为零或大于RMAX_SIZE / sizeof(wchar_t))。

示例

#include <wchar.h>
#include <stdio.h>
#include <locale.h>
 
int main(void)
{
    wchar_t *src = L"犬 means dog";
//  src[0] = L'狗' ; // this would be undefined behavior
    wchar_t dst[wcslen(src) + 1]; // +1 to accommodate for the null terminator
    wcscpy(dst, src);
    dst[0] = L'狗'; // OK
 
    setlocale(LC_ALL, "en_US.utf8");
    printf("src = %ls\ndst = %ls\n", src, dst);
}

输出:

src = 犬 means dog
dst = 狗 means dog

参考

  • C11标准(ISO/IEC 9899:2011):
    • 7.29.4.1.2 wcscpy函数(p: 430)
    • K.3.9.2.1.1 wcscpy_s函数(p: 639)
  • C99标准(ISO/IEC 9899:1999):
    • 7.24.4.1.2 wcscpy函数(p: 376)

另请参阅

wcsncpywcsncpy_s(C95)(C11)

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

wmemcpywmemcpy_s(C95)(C11)

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

strcpystrcpy_s(C11)

将一个字符串复制到另一个(函数)

| 用于wcscpy |的C ++文档

C

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