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