Namespaces
Variants

wcscat, wcscat_s

来自 zh.cppreference.net
定义于头文件 <wchar.h>
wchar_t* wcscat( wchar_t* dest, const wchar_t* src );
(1) (自 C95)
(至 C99)
wchar_t* wcscat( wchar_t* restrict dest, const wchar_t* restrict src );
(自 C99)
errno_t wcscat_s( wchar_t* restrict dest, rsize_t destsz,
                  const wchar_t* restrict src );
(2) (自 C11)
1) 将由 src 指向的宽字符串副本追加到由 dest 指向的宽字符串末尾。宽字符 src[0] 替换 dest 末尾的空终止符。结果宽字符串以空字符终止。如果目标数组不足以容纳 src 和 dest 的内容以及结尾的空宽字符,则行为未定义。如果字符串重叠,则行为未定义。
2) 与 (1) 相同,不同之处在于它可能会用未指定的值破坏目标数组的其余部分(从写入的最后一个字符到 destsz),并且在运行时检测到以下错误,并调用当前安装的 约束处理函数:
  • src 或 dest 是空指针
  • destsz 为零或大于 RSIZE_MAX / sizeof(wchar_t)
  • 在 destsz 的前 dest
  • 个宽字符中不存在空终止符会发生截断(dest 末尾的可用空间不足以容纳 src 的所有宽字符,包括空终止符)
  • 源字符串和目标字符串之间会发生重叠
与所有边界检查函数一样,wcscat_s 仅在实现定义了 __STDC_LIB_EXT1__ 且用户在包含 __STDC_WANT_LIB_EXT1__ 之前将 1 定义为整数常量 <wchar.h> 时保证可用。

参数

dest - 指向待追加的以空字符结尾的宽字符串的指针
src - 指向待复制的以空字符结尾的宽字符串的指针
destsz - 最大写入字符数,通常为目标缓冲区的大小

返回值

1) 返回一个 dest
的副本。2)L'\0' 成功时返回零,错误时返回非零值。此外,发生错误时,会将内容写入 dest[0](除非 dest 是空指针,或者 destsz 为零或大于 RSIZE_MAX / sizeof(wchar_t))。

示例

#include <locale.h>
#include <stdio.h>
#include <wchar.h>

int main(void)
{
    wchar_t str[50] = L"Земля, прощай.";
    wcscat(str, L" ");
    wcscat(str, L"В добрый путь.");
    setlocale(LC_ALL, "en_US.utf8");
    printf("%ls", str);
}

输出:

Земля, прощай. В добрый путь.

参考资料

  • C23 标准(ISO/IEC 9899:2024):
  • 7.31.4.3.1 wcscat 函数(第 439 页)
  • K.3.9.3.2.1 wcscat_s 函数(第 665-666 页)
  • C17 标准(ISO/IEC 9899:2018):
  • 7.29.4.3.1 wcscat 函数(第 315 页)
  • K.3.9.2.2.1 wcscat_s 函数(第 466 页)
  • C11 标准(ISO/IEC 9899:2011):
  • 7.29.4.3.1 wcscat 函数(第 432 页)
  • K.3.9.2.2.1 wcscat_s 函数(第 642-643 页)
  • C99 标准(ISO/IEC 9899:1999):
  • 7.24.4.3.1 wcscat 函数(第 378 页)

参见

将指定数量的宽字符从一个宽字符串追加到另一个宽字符串
(函数)
连接两个字符串
(函数)
(C95) (C11)
将一个宽字符串复制到另一个宽字符串
(函数)
C++ 文档 关于 wcscat