Namespaces
Variants

wcsncat, wcsncat_s

From cppreference.net
< c ‎ | string ‎ | wide
Определено в заголовочном файле <wchar.h>
(1)
wchar_t * wcsncat ( wchar_t * dest, const wchar_t * src, size_t count ) ;
(начиная с C95)
(до C99)
wchar_t * wcsncat ( wchar_t * restrict dest,
const wchar_t * restrict src, size_t count ) ;
(начиная с C99)
errno_t wcsncat_s ( wchar_t * restrict dest, rsize_t destsz,
const wchar_t * restrict src, rsize_t count ) ;
(2) (начиная с C11)
1) Добавляет не более count широких символов из широкой строки, на которую указывает src , останавливаясь, если копируется нулевой терминатор, в конец строки символов, на которую указывает dest . Широкий символ src [ 0 ] заменяет нулевой терминатор в конце dest . Нулевой терминатор всегда добавляется в конце (таким образом, максимальное количество широких символов, которое функция может записать, составляет count + 1 ).
Поведение не определено, если целевой массив недостаточно велик для содержимого как str , так и dest , а также завершающего нулевого широкого символа.
Поведение не определено, если строки перекрываются.
2) Аналогично (1) , за исключением того, что эта функция может портить оставшуюся часть целевого массива (начиная с последнего записанного широкого символа до destsz ), и что следующие ошибки обнаруживаются во время выполнения и вызывают текущую установленную функцию обработки ограничений :
  • src или dest является нулевым указателем
  • destsz или count равно нулю или больше RSIZE_MAX / sizeof ( wchar_t )
  • отсутствует нулевой широкий символ в первых destsz широких символах dest
  • произойдет усечение: count или длина src (в зависимости от того, что меньше) превышает доступное пространство между нулевым терминатором dest и destsz .
  • произойдет перекрытие между исходной и целевой строками
Как и все функции с проверкой границ, wcsncat_s гарантированно доступна только если __STDC_LIB_EXT1__ определено реализацией и если пользователь определяет __STDC_WANT_LIB_EXT1__ как целочисленную константу 1 перед включением <wchar.h> .

Содержание

Параметры

dest - указатель на широкую строку с нулевым завершителем, к которой нужно добавить
src - указатель на широкую строку с нулевым завершителем, из которой нужно копировать
count - максимальное количество широких символов для копирования
destsz - размер буфера назначения

Возвращаемое значение

1) возвращает копию dest
2) возвращает ноль при успехе, возвращает ненулевое значение при ошибке. Также при ошибке записывает L ' \0 ' в dest [ 0 ] (если только dest не является нулевым указателем или destsz не равен нулю или не больше RSIZE_MAX / sizeof ( wchar_t ) ).

Примечания

Хотя усечение для соответствия целевому буферу представляет собой угрозу безопасности и, следовательно, нарушение ограничений времени выполнения для wcsncat_s , можно получить поведение с усечением, указав count равным размеру целевого массива минус один: функция скопирует первые count широких символов и добавит нулевой терминатор как обычно: wcsncat_s ( dst, sizeof dst / sizeof * dst, src, ( sizeof dst / sizeof * dst ) - wcsnlen_s ( dst, sizeof dst / sizeof * dst ) - 1 ) ;

Пример

#include <wchar.h> 
#include <stdio.h>
#include <locale.h>
int main(void) 
{
    wchar_t str[50] = L"Земля, прощай.";
    wcsncat(str, L" ", 1);
    wcsncat(str, L"В добрый путь.", 8); // only append the first 8 wide chars
    setlocale(LC_ALL, "en_US.utf8");
    printf("%ls", str);
}

Возможный вывод:

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

Ссылки

  • Стандарт C17 (ISO/IEC 9899:2018):
  • 7.29.4.3.2 Функция wcsncat (стр. 315)
  • K.3.9.2.2.2 Функция wcsncat_s (стр. 466-467)
  • Стандарт C11 (ISO/IEC 9899:2011):
  • 7.29.4.3.2 Функция wcsncat (стр: 432-433)
  • K.3.9.2.2.2 Функция wcsncat_s (стр: 643-644)
  • Стандарт C99 (ISO/IEC 9899:1999):
  • 7.24.4.3.2 Функция wcsncat (стр: 378-379)

Смотрите также

(C95) (C11)
добавляет копию одной широкой строки к другой
(функция)
объединяет определенное количество символов двух строк
(функция)
(C95) (C11)
копирует одну широкую строку в другую
(функция)
C++ documentation для wcsncat