Spec-Zone.ru › C

wcscpy, wcscpy_s

Defined in header <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 <locale.h>
#include <stdio.h>
#include <wchar.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 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

Ссылки

  • Стандарт C23 (ISO/IEC 9899:2023):
    • 7.29.4.1.2 Функция wcscpy (стр. TBD)
    • K.3.9.2.1.1 Функция wcscpy_s (стр. 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 (стр. 430)
    • K.3.9.2.1.1 Функция wcscpy_s (стр. 639)
  • Стандарт C99 (ISO/IEC 9899:1999):
    • 7.24.4.1.2 Функция wcscpy (стр. 376)

См. также

wcsncpywcsncpy_s
(C95)(C11)
копирует определенное количество широких символов из одной строки в другую
(функция)
wmemcpywmemcpy_s
(C95)(C11)
копирует определенное количество широких символов между двумя неперекрывающимися массивами
(функция)
strcpystrcpy_s
(C11)
копирует одну строку в другую
(функция)
Документация C++ для wcscpy

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/c/string/wide/wcscpy

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API