.\" -*- coding: UTF-8 -*- '\" t .\" Copyright (c) Bruno Haible .\" and Copyright 2014 Michael Kerrisk .\" .\" SPDX-License-Identifier: GPL-2.0-or-later .\" .\" References consulted: .\" GNU glibc-2 source code and manual .\" Dinkumware C library reference http://www.dinkumware.com/ .\" OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html .\" ISO/IEC 9899:1999 .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH mbstowcs 3 "20 июля 2023 г." "Linux man\-pages 6.05.01" .SH ИМЯ mbstowcs \- преобразует многобайтовую строку в строку широких символов .SH LIBRARY Standard C library (\fIlibc\fP, \fI\-lc\fP) .SH СИНТАКСИС .nf \fB#include \fP .PP \fBsize_t mbstowcs(wchar_t \fP\fIdest\fP\fB[restrict .\fP\fIn\fP\fB], const char *restrict \fP\fIsrc\fP\fB,\fP \fB size_t \fP\fIn\fP\fB);\fP .fi .SH ОПИСАНИЕ Если значение \fIdest\fP не равно NULL, то функция \fBmbstowcs\fP() преобразует многобайтовую строку \fIsrc\fP в широкосимвольную строку начиная с \fIdest\fP. В \fIdest\fP будет записано не более \fIn\fP широких символов. Последовательность символов в строке \fIsrc\fP должна начинаться с начального состояния. Преобразование может прекратиться по трём причинам: .IP \[bu] 3 Во входных данных находится неправильная многобайтовая последовательность. В этом случае возвращается \fI(size_t)\ \-1\fP. .IP \[bu] \fIn\fP non\-L\[aq]\e0\[aq] wide characters have been stored at \fIdest\fP. In this case, the number of wide characters written to \fIdest\fP is returned, but the shift state at this point is lost. .IP \[bu] The multibyte string has been completely converted, including the terminating null character (\[aq]\e0\[aq]). In this case, the number of wide characters written to \fIdest\fP, excluding the terminating null wide character, is returned. .PP Программист должен проверить, что в \fIdest\fP есть место по крайней мере для \fIn\fP широких символов. .PP Если значение \fIdest\fP равно NULL, то \fIn\fP игнорируется и преобразование выполняется как описано выше, исключая то, что преобразованные широкие символы не записываются в память и нет ограничения по длине. .PP Для того, чтобы избежать ограничения пункта 2, программист должен удостовериться, что значение \fIn\fP больше или равно \fImbstowcs(NULL,src,0)+1\fP. .SH "ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ" Функция \fBmbstowcs\fP() возвращает количество широких символов, которые составили преобразованную часть широкосимвольной строки, не включая конечный широкий символ null Если обнаружена некорректная многобайтовая последовательность, то возвращается \fI(size_t)\ \-1\fP. .SH АТРИБУТЫ Описание терминов данного раздела смотрите в \fBattributes\fP(7). .TS allbox; lbx lb lb l l l. Интерфейс Атрибут Значение T{ .na .nh \fBmbstowcs\fP() T} Безвредность в нитях MT\-Safe .TE .sp 1 .SH ВЕРСИИ Функция \fBmbsrtowcs\fP(3) предоставляет лучший интерфейс с теми же возможностями. .SH СТАНДАРТЫ C11, POSIX.1\-2008. .SH ИСТОРИЯ POSIX.1\-2001, C99. .SH ЗАМЕЧАНИЯ Поведение \fBmbstowcs\fP() зависит от категории \fBLC_CTYPE\fP текущей локали. .SH ПРИМЕРЫ В программе, представленной ниже, показано использование \fBmbstowcs\fP(), а также некоторые функции классификации широких символов. Пример запуска: .PP .in +4n .EX $ ./t_mbstowcs de_DE.UTF\-8 Grüße! Length of source string (excluding terminator): 8 bytes 6 multibyte characters \& Wide character string is: Grüße! (6 characters) G alpha upper r alpha lower ü alpha lower ß alpha lower e alpha lower ! !alpha .EE .in .SS "Исходный код программы" .\" SRC BEGIN (mbstowcs.c) \& .EX #include #include #include #include #include #include \& int main(int argc, char *argv[]) { size_t mbslen; /* Number of multibyte characters in source */ wchar_t *wcs; /* Pointer to converted wide character string */ \& if (argc < 3) { fprintf(stderr, "Usage: %s \en", argv[0]); exit(EXIT_FAILURE); } \& /* Apply the specified locale. */ \& if (setlocale(LC_ALL, argv[1]) == NULL) { perror("setlocale"); exit(EXIT_FAILURE); } \& /* Calculate the length required to hold argv[2] converted to a wide character string. */ \& mbslen = mbstowcs(NULL, argv[2], 0); if (mbslen == (size_t) \-1) { perror("mbstowcs"); exit(EXIT_FAILURE); } \& /* Describe the source string to the user. */ \& printf("Length of source string (excluding terminator):\en"); printf(" %zu bytes\en", strlen(argv[2])); printf(" %zu multibyte characters\en\en", mbslen); \& /* Allocate wide character string of the desired size. Add 1 to allow for terminating null wide character (L\[aq]\e0\[aq]). */ \& wcs = calloc(mbslen + 1, sizeof(*wcs)); if (wcs == NULL) { perror("calloc"); exit(EXIT_FAILURE); } \& /* Convert the multibyte character string in argv[2] to a wide character string. */ \& if (mbstowcs(wcs, argv[2], mbslen + 1) == (size_t) \-1) { perror("mbstowcs"); exit(EXIT_FAILURE); } \& printf("Wide character string is: %ls (%zu characters)\en", wcs, mbslen); \& /* Now do some inspection of the classes of the characters in the wide character string. */ \& for (wchar_t *wp = wcs; *wp != 0; wp++) { printf(" %lc ", (wint_t) *wp); \& if (!iswalpha(*wp)) printf("!"); printf("alpha "); \& if (iswalpha(*wp)) { if (iswupper(*wp)) printf("upper "); \& if (iswlower(*wp)) printf("lower "); } \& putchar(\[aq]\en\[aq]); } \& exit(EXIT_SUCCESS); } .EE .\" SRC END .SH "СМ. ТАКЖЕ" \fBmblen\fP(3), \fBmbsrtowcs\fP(3), \fBmbtowc\fP(3), \fBwcstombs\fP(3), \fBwctomb\fP(3) .PP .SH ПЕРЕВОД Русский перевод этой страницы руководства был сделан aereiae , Alexey , Azamat Hackimov , Dmitriy S. Seregin , Dmitry Bolkhovskikh , ITriskTI , Max Is , Yuri Kozlov , Иван Павлов и Малянов Евгений Викторович . .PP Этот перевод является бесплатной документацией; прочитайте .UR https://www.gnu.org/licenses/gpl-3.0.html Стандартную общественную лицензию GNU версии 3 .UE или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ. .PP Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на .MT man-pages-ru-talks@lists.sourceforge.net .ME .