Поделиться через


_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, and _sys_nerr.

В случае недопустимого параметра, как перечислено в таблице ниже, эта функция вызывает обработчик недопустимых параметров, как описано в разделе Проверка параметров. Если продолжение выполнения разрешено, функция устанавливает errno в EINVAL и возвращает EINVAL.

Условия возникновения ошибки

_Buffer

_SizeInBytes

_Value

_Count

_Dec

_Sign

Возвращаемое значение

Значение в buffer

NULL

any

any

any

any

any

EINVAL

Без изменений.

Не NULL (указывает на допустимый адрес памяти)

<=0

any

any

any

any

EINVAL

Без изменений.

any

any

any

any

NULL

any

EINVAL

Без изменений.

any

any

any

any

any

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. Дополнительные сведения см. в разделе Безопасные перегрузки шаблонов.

Отладочная версия этой функции сначала заполняет буфер значением 0xFD. Для отключения данного поведения используйте _CrtSetDebugFillThreshold.

Требования

Функция

Обязательный заголовок

Необязательный заголовок

_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);  
  
}
  

Эквивалент в .NET Framework

ToString

См. также

Ссылки

Преобразование данных

Поддержка чисел с плавающей запятой

atof, _atof_l, _wtof, _wtof_l

_ecvt

_fcvt_s

_gcvt_s