_fcvt_s
Преобразует число с плавающей запятой в строку. Эта функция представляет собой версию улучшений _fcvt
безопасности, как описано в функциях безопасности в CRT.
Синтаксис
errno_t _fcvt_s(
char* buffer,
size_t sizeInBytes,
double value,
int count,
int *dec,
int *sign
);
template <size_t size>
errno_t _fcvt_s(
char (&buffer)[size],
double value,
int count,
int *dec,
int *sign
); // C++ only
Параметры
buffer
Предоставленный буфер, в который помещается результат преобразования.
sizeInBytes
Размер буфера в байтах.
value
Число, которое требуется преобразовать.
count
Число разрядов после десятичной запятой.
dec
Указатель на сохраненную позицию десятичной запятой.
sign
Указатель на сохраненный индикатор знака.
Возвращаемое значение
Нуль при успешном завершении. Возвращаемое значение — это код ошибки, если произошел сбой. Коды ошибок определены в errno.h
. Список этих ошибок см. в разделе errno
, _doserrno
_sys_errlist
и _sys_nerr
.
Если имеется недопустимый параметр, как указано в следующей таблице, эта функция вызывает обработчик недопустимых параметров, как описано в разделе "Проверка параметров". Если выполнение может быть продолжено, эта функция задает для errno
значение EINVAL
и возвращает EINVAL
.
Условия ошибок
buffer |
sizeInBytes |
value |
count |
dec |
sign |
Возврат | Значение в buffer |
---|---|---|---|---|---|---|---|
NULL |
любое | любое | любое | любое | любое | EINVAL |
Не изменено. |
Не NULL (указывает на допустимый адрес в памяти) |
<=0 | любое | любое | любое | любое | EINVAL |
Не изменено. |
любое | любое | любое | любое | NULL |
любое | EINVAL |
Не изменено. |
любое | любое | любое | любое | любое | NULL |
EINVAL |
Не изменено. |
Проблемы с безопасностью
_fcvt_s
Может создать нарушение доступа, если buffer
не указывает на допустимую память и не NULL
является.
Замечания
Функция _fcvt_s
преобразует число с плавающей запятой в строку, завершаемую нуль-символом. Параметр value
представляет собой преобразуемое число с плавающей запятой. Функция _fcvt_s
сохраняет цифры параметра value
в виде строки и добавляет нуль-символ ("\0"). Параметр count
определяет количество цифр, сохраняемых после десятичной запятой. Избыточные цифры округляются до count
знаков. Если количество цифр меньше точности count
, строка дополняется нулями.
В строке сохраняются только цифры. Положение десятичной запятой и знак value
можно получить из параметров dec
и sign
после вызова. Параметр dec
указывает на целочисленное значение; это целочисленное значение представляет положение десятичной запятой относительно начала строки. Ноль или отрицательное целое число означают, что десятичная запятая располагается слева от первой цифры. Параметр sign
указывает на целое число, обозначающее знак величины value
. Целое число имеет значение 0, если значение value
положительное, и ненулевое значение, если значение value
отрицательное.
Буфер длины _CVTBUFSIZE
достаточен для любого значения с плавающей запятой.
Различие между функциями _ecvt_s
и _fcvt_s
заключается в интерпретации параметра count
. _ecvt_s
count
интерпретируется как общее число цифр в выходной строке и _fcvt_s
интерпретируется count
как число цифр после десятичной запятой.
В C++ использование этих функций упрощено шаблонными перегрузками; перегрузки могут определить длину буфера автоматически, устраняя необходимость указывать аргумент size. Дополнительные сведения см. в разделе "Безопасные перегрузки шаблонов".
Отладочная версия этой функции сначала заполняет буфер 0xFE. Чтобы отключить это поведение, используйте _CrtSetDebugFillThreshold
.
По умолчанию глобальное состояние этой функции ограничивается приложением. Чтобы изменить это поведение, см . статью "Глобальное состояние" в CRT.
Требования
Function | Обязательный заголовок | Необязательный заголовок |
---|---|---|
_fcvt_s |
<stdlib.h> | <errno.h> |
Дополнительные сведения о совместимости см. в разделе Совместимость.
Библиотеки: все версии библиотек среды выполнения C.
Пример
// fcvt_s.c
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
int main()
{
char * buf = 0;
int decimal;
int sign;
int err;
buf = (char*) malloc(_CVTBUFSIZE);
err = _fcvt_s(buf, _CVTBUFSIZE, 1.2, 5, &decimal, &sign);
if (err != 0)
{
printf("_fcvt_s failed with error code %d\n", err);
exit(1);
}
printf("Converted value: %s\n", buf);
}
Converted value: 120000
См. также
Преобразование данных
Поддержка математических и плавающих точек
atof
, , _atof_l
_wtof
_wtof_l
_ecvt_s
_gcvt_s
_fcvt