1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
|
.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 <libmpuio.h>
__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)
|