std:: wprintf, std:: fwprintf, std:: swprintf
|
Определено в заголовке
<cwchar>
|
||
|
int
wprintf
(
const
wchar_t
*
format, ...
)
;
|
(1) | |
|
int
fwprintf
(
std::
FILE
*
stream,
const
wchar_t
*
format, ...
)
;
|
(2) | |
|
int
swprintf
(
wchar_t
*
buffer,
std::
size_t
size,
const
wchar_t
*
format, ...
)
;
|
(3) | |
Загружает данные из указанных местоположений, преобразует их в эквиваленты широких строк и записывает результаты в различные приемники.
Содержание |
Параметры
| stream | - | выходной файловый поток для записи |
| buffer | - | указатель на строку широких символов для записи |
| size | - | может быть записано до size - 1 символов плюс нулевой терминатор |
| format | - | указатель на нуль-терминированную широкую строку, определяющую способ интерпретации данных |
| ... | - | аргументы, определяющие данные для вывода. Если любой аргумент после преобразований по умолчанию не соответствует типу, ожидаемому соответствующим спецификатором преобразования, или если аргументов меньше, чем требуется по format , поведение не определено. Если аргументов больше, чем требуется по format , лишние аргументы вычисляются и игнорируются |
Строка
формата
состоит из обычных широких символов (за исключением
%
), которые копируются без изменений в выходной поток, и спецификаций преобразования. Каждая спецификация преобразования имеет следующий формат:
-
-
вводный
%символ.
-
вводный
-
- (необязательно) один или несколько флагов, изменяющих поведение преобразования:
-
-
-: результат преобразования выравнивается по левому краю в пределах поля (по умолчанию выравнивается по правому краю). -
+: знак знаковых преобразований всегда добавляется перед результатом преобразования (по умолчанию результат предваряется минусом только когда он отрицательный). -
space
: если результат знакового преобразования не начинается с символа знака или является пустым, перед результатом добавляется пробел. Игнорируется если присутствует флаг
+. -
#: альтернативная форма преобразования выполняется. Смотрите таблицу ниже для точных эффектов, иначе поведение не определено. -
0: для целочисленных и преобразований чисел с плавающей точкой, ведущие нули используются для заполнения поля вместо символов space . Для целых чисел игнорируется если точность явно указана. Для других преобразований использование этого флага приводит к неопределенному поведению. Игнорируется если присутствует флаг-.
-
-
-
(необязательно)
целочисленное значение или
*, определяющее минимальную ширину поля. Результат дополняется символами пробела (по умолчанию) при необходимости слева при выравнивании по правому краю или справа при выравнивании по левому краю. В случае использования*, ширина задается дополнительным аргументом типа int , который указывается перед аргументом для преобразования и аргументом, задающим точность, если он предоставлен. Если значение аргумента отрицательное, это приводит к указанию флага-и положительной ширине поля (Примечание: Это минимальная ширина: значение никогда не усекается.).
-
(необязательно)
целочисленное значение или
-
-
(необязательно)
.за которым следует целое число или*, либо ничего, что определяет точность преобразования. В случае, когда используется*, точность задается дополнительным аргументом типа int , который указывается перед преобразуемым аргументом, но после аргумента, задающего минимальную ширину поля, если он указан. Если значение этого аргумента отрицательное, оно игнорируется. Если не используется ни число, ни*, точность принимается равной нулю. Смотрите таблицу ниже для точного воздействия точности .
-
(необязательно)
-
- (необязательный) модификатор длины который указывает размер аргумента (в сочетании со спецификатором формата преобразования он определяет тип соответствующего аргумента).
-
- спецификатор формата преобразования.
Доступны следующие спецификаторы формата:
|
Спецификатор
преобразования |
Объяснение |
Ожидаемый
тип аргумента |
||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Модификатор длины→ | hh | h | нет | l | ll | j | z | t | L | |
| Доступно только с C++11→ | Да | Да | Да | Да | Да | |||||
%
|
Выводит символ
%
. Полная спецификация преобразования должна быть
%%
.
|
N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A |
c
|
Выводит один символ .
|
N/A | N/A |
int
|
std::wint_t
|
N/A | N/A | N/A | N/A | N/A |
s
|
Записывает строку символов .
|
N/A | N/A |
char
*
|
wchar_t
*
|
N/A | N/A | N/A | N/A | N/A |
d
i
|
Преобразует знаковое целое число в десятичное представление [-]dddd .
|
signed
char
|
short
|
int
|
long
|
long
long
|
※
|
N/A | ||
o
|
Преобразует целое число без знака в восьмеричное представление oooo .
|
unsigned
char
|
unsigned
short
|
unsigned
int
|
unsigned
long
|
unsigned
long
long
|
беззнаковая версия
std::ptrdiff_t
|
N/A | ||
x
X
|
Преобразует целое число без знака в шестнадцатеричное представление hhhh .
|
Н/Д | ||||||||
u
|
Преобразует беззнаковое целое число в десятичное представление dddd .
|
N/A | ||||||||
f
F
(C++11)
|
Преобразует число с плавающей запятой в десятичную запись в формате [-]ddd.ddd .
|
N/A | N/A |
double
|
double
(C++11)
|
N/A | N/A | N/A | N/A |
long
double
|
e
E
|
Преобразует число с плавающей точкой в экспоненциальную десятичную запись.
|
N/A | N/A | N/A | N/A | N/A | N/A | |||
a
A
(C++11) |
Преобразует число с плавающей точкой в шестнадцатеричную экспоненциальную запись.
|
N/A | N/A | N/A | N/A | N/A | N/A | |||
g
G
|
Преобразует число с плавающей точкой в десятичную запись или запись с десятичным показателем степени в зависимости от значения и точности .
|
N/A | N/A | N/A | N/A | N/A | N/A | |||
n
|
Возвращает количество символов, записанных на данный момент этим вызовом функции.
|
signed
char
*
|
short
*
|
int
*
|
long
*
|
long
long
*
|
※
|
N/A | ||
p
|
Выводит определяемую реализацией последовательность символов, определяющую указатель . |
N/A | N/A |
void
*
|
N/A | N/A | N/A | N/A | N/A | N/A |
| Примечания | ||||||||||
|
Функции преобразования чисел с плавающей точкой преобразуют бесконечность в
Не-число преобразуется в
Преобразования
Спецификатор преобразования, используемый для вывода char , unsigned char , signed char , short и unsigned short , ожидает продвинутые типы стандартных продвижений аргументов , но перед выводом его значение будет преобразовано в char , unsigned char , signed char , short и unsigned short . Безопасно передавать значения этих типов из-за продвижения, которое происходит при вызове вариативной функции.
Правильные спецификаторы преобразования для типов символов фиксированной ширины (
std::int8_t
и т.д.) определены в заголовочном файле
<cinttypes>
(хотя
PRIdMAX
,
PRIuMAX
и т.д. являются синонимами для
Спецификатор преобразования с записью в память
Существует
точка следования
после действия каждого спецификатора преобразования; это позволяет сохранять несколько результатов
Если спецификация преобразования недействительна, поведение не определено. |
||||||||||
Возвращаемое значение
Примечания
В то время как узкие строки предоставляют
std::snprintf
, что позволяет определить необходимый размер выходного буфера, для широких строк эквивалента не существует, и для определения размера буфера программе может потребоваться вызвать
std::swprintf
, проверить возвращаемое значение и перераспределить буфер большего размера, повторяя попытку до достижения успеха.
Пример
#include <clocale> #include <cwchar> #include <iostream> #include <locale> int main() { char narrow_str[] = "z\u00df\u6c34\U0001f34c"; // или "zß水🍌"; // или "\x7a\xc3\x9f\xe6\xb0\xb4\xf0\x9f\x8d\x8c"; wchar_t warr[29]; // ожидаемая строка состоит из 28 символов плюс нуль-терминатор std::setlocale(LC_ALL, "en_US.utf8"); std::swprintf(warr, sizeof warr/sizeof *warr, L"Converted from UTF-8: '%s'", narrow_str); std::wcout.imbue(std::locale("en_US.utf8")); std::wcout << warr << '\n'; }
Вывод:
Converted from UTF-8: 'zß水🍌'
Смотрите также
|
(C++11)
|
выводит форматированный вывод в
stdout
, файловый поток или буфер
(функция) |
|
выводит форматированный вывод широких символов в
stdout
, файловый поток
или буфер, используя список переменных аргументов (функция) |
|
|
записывает широкую строку в файловый поток
(функция) |
|
|
Документация C
для
wprintf
,
fwprintf
,
swprintf
|
|