C参考手册
字符串 | Strings
wcscpy_s
在头文件<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 ++文档