.TH MPU_STR16ING 3 "Август 2026" "libmpuio" "Руководство программиста LIBMPUIO" .SH ИМЯ mpu_str16cat, mpu_str16chr, mpu_str16chrnul, mpu_str16cmp, mpu_str16cpy, mpu_str16cspn, mpu_str16dup, mpu_str16ndup, mpu_str16len, mpu_str16ncat, mpu_str16ncmp, mpu_str16ncpy, mpu_str16nlen, mpu_str16pbrk, mpu_str16rchr, mpu_str16spn, mpu_str16pcpy, mpu_str16pncpy, mpu_str16str, mpu_str16rstr, mpu_str16tok, mpu_str16tok_r \- операции со строгими строками UCS-2 .SH ОБЗОР .nf #include __mpu_char16_t *mpu_str16cat( __mpu_char16_t *dest, const __mpu_char16_t *src ); __mpu_char16_t *mpu_str16chr( const __mpu_char16_t *s, __mpu_char16_t c ); __mpu_char16_t *mpu_str16chrnul( const __mpu_char16_t *s, __mpu_char16_t c ); int mpu_str16cmp( const __mpu_char16_t *s1, const __mpu_char16_t *s2 ); __mpu_char16_t *mpu_str16cpy( __mpu_char16_t *dest, const __mpu_char16_t *src ); __mpu_size_t mpu_str16cspn( const __mpu_char16_t *s, const __mpu_char16_t *reject ); __mpu_char16_t *mpu_str16dup( const __mpu_char16_t *s ); __mpu_char16_t *mpu_str16ndup( const __mpu_char16_t *s, __mpu_size_t n ); __mpu_size_t mpu_str16len( const __mpu_char16_t *s ); __mpu_char16_t *mpu_str16ncat( __mpu_char16_t *dest, const __mpu_char16_t *src, __mpu_size_t n ); int mpu_str16ncmp( const __mpu_char16_t *s1, const __mpu_char16_t *s2, __mpu_size_t n ); __mpu_char16_t *mpu_str16ncpy( __mpu_char16_t *dest, const __mpu_char16_t *src, __mpu_size_t n ); __mpu_size_t mpu_str16nlen( const __mpu_char16_t *s, __mpu_size_t maxlen ); __mpu_char16_t *mpu_str16pbrk( const __mpu_char16_t *s, const __mpu_char16_t *accept ); __mpu_char16_t *mpu_str16rchr( const __mpu_char16_t *s, __mpu_char16_t c ); __mpu_size_t mpu_str16spn( const __mpu_char16_t *s, const __mpu_char16_t *accept ); __mpu_char16_t *mpu_str16pcpy( __mpu_char16_t *dest, const __mpu_char16_t *src ); __mpu_char16_t *mpu_str16pncpy( __mpu_char16_t *dest, const __mpu_char16_t *src, __mpu_size_t n ); __mpu_char16_t *mpu_str16str( const __mpu_char16_t *haystack, const __mpu_char16_t *needle ); __mpu_char16_t *mpu_str16rstr( const __mpu_char16_t *haystack, const __mpu_char16_t *needle ); __mpu_char16_t *mpu_str16tok( __mpu_char16_t *s, const __mpu_char16_t *delim ); __mpu_char16_t *mpu_str16tok_r( __mpu_char16_t *s, const __mpu_char16_t *delim, __mpu_char16_t **saveptr ); .fi .SH ОПИСАНИЕ Эти функции являются UCS-2-аналогами 8-битных строковых функций LIBMPUIO. Строки представляют собой массивы .B __mpu_char16_t и завершаются нулевой кодовой единицей. Аргумент счётчика .I n измеряется в 16-битных кодовых единицах. .PP Операции копирования, конкатенации, сравнения, поиска, span и определения длины повторяют контракты соответствующих строковых функций libc, но работают с объектами .BR __mpu_char16_t . .PP .B mpu_str16ncpy() копирует не более .I n кодовых единиц и, если источник короче, заполняет остаток нулевыми кодовыми единицами. Как и у .BR strncpy (3), при усечении дополнительный терминатор не добавляется. .PP .B mpu_str16pcpy() возвращает адрес завершающего нуля, записанного в .IR dest . .PP .B mpu_str16pncpy() копирует и дополняет как .BR mpu_str16ncpy (). Для короткого источника функция возвращает адрес первого нуля, записанного в .IR dest ; для источника длиной не менее .I n кодовых единиц возвращается .IR dest+n . .PP .B mpu_str16rstr() находит последнее вхождение .IR needle . Пустая needle совпадает с завершающим нулём haystack. .PP .B mpu_str16tok() предоставляет токенизацию строк UCS-2 с состоянием в стиле strtok. Указатель продолжения является thread-local: разные потоки выполнения имеют независимое состояние, тогда как вложенная токенизация внутри одного потока по-прежнему мешает сама себе так же, как обычный strtok(3). .PP .B mpu_str16tok_r() предоставляет реентерабельную токенизацию и изменяет входной буфер, заменяя разделители нулевыми кодовыми единицами. .PP .BR mpu_str16dup () и .B mpu_str16ndup() возвращают копии, выделенные через malloc. Ограниченная форма копирует не более .I n кодовых единиц UCS-2 и добавляет завершающий ноль. Передача NULL возвращает NULL и устанавливает .B errno в .BR EINVAL . .SH ПРАВИЛА UCS-2 Этот API предназначен для внутреннего строгого представления UCS-2 LIBMPUIO. Элементарные строковые операции сравнивают и копируют кодовые единицы; они не выполняют нормализацию Unicode или регистронезависимое преобразование. .SH ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ Функции длины и span возвращают количество 16-битных кодовых единиц. Функции, возвращающие указатели, и функции сравнения следуют описанным выше контрактам. .SH СМ. ТАКЖЕ .BR mpu_str8ing (3), .BR mpu_utf8ing (3), .BR mpu_string_conversion (3)