wcscpy, wcscpy_s
From cppreference.net
|
定义于头文件
<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 ) ,即会发生截断
- 源字符串和目标字符串之间会出现重叠
-
与所有边界检查函数一样,仅当实现定义了
__STDC_LIB_EXT1__
且用户在包含
<wchar.h>
之前将
__STDC_WANT_LIB_EXT1__
定义为整型常量
1
时,才保证
wcscpy_s可用。
目录 |
参数
| dest | - | 指向要复制到的宽字符数组的指针 |
| src | - | 指向要复制的以空字符结尾的宽字符串的指针 |
| destsz | - | 要写入的最大字符数,通常是目标缓冲区的大小 |
返回值
1)
返回
dest
的副本
2)
成功时返回零,错误时返回非零值。此外,在发生错误时,将
L
'
\0
'
写入
dest
[
0
]
(除非
dest
是空指针,或
destsz
为零或大于
RMAX_SIZE
/
sizeof
(
wchar_t
)
)。
示例
运行此代码
#include <locale.h> #include <stdio.h> #include <wchar.h> int main(void) { wchar_t* src = L"犬 means dog"; // src[0] = L'狗' ; // 这将导致未定义行为 wchar_t dst[wcslen(src) + 1]; // +1 用于空终止符 wcscpy(dst, src); dst[0] = L'狗'; // 正确操作 setlocale(LC_ALL, "en_US.utf8"); printf("src = %ls\ndst = %ls\n", src, dst); }
输出:
src = 犬 means dog dst = 狗 means dog
参考文献
- C23 标准 (ISO/IEC 9899:2024):
-
- 7.29.4.1.2 wcscpy 函数 (p: TBD)
-
- K.3.9.2.1.1 wcscpy_s 函数 (p: TBD)
- C17 标准 (ISO/IEC 9899:2018):
-
- 7.29.4.1.2 wcscpy 函数 (页: TBD)
-
- K.3.9.2.1.1 wcscpy_s 函数 (页: TBD)
- 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函数(页码:376)
参见
|
(C95)
(C11)
|
从字符串复制指定数量的宽字符到另一个字符串
(函数) |
|
(C95)
(C11)
|
在两个非重叠数组间复制指定数量的宽字符
(函数) |
|
(C11)
|
将一个字符串复制到另一个字符串
(函数) |
|
C++ 文档
for
wcscpy
|
|