_gcvt
Преобразует число с плавающей запятой в строку и сохраняет ее в буфере. Существует более безопасная версия этой функции; см. раздел _gcvt_s.
char *_gcvt(
double value,
int digits,
char *buffer
);
Параметры
value
Преобразуемое значение.digits
Количество хранящихся значащих цифр.buffer
Место хранения для результата.
Возвращаемое значение
_gcvt возвращает указатель на строку цифр.
Заметки
Функция _gcvt преобразует value с плавающей запятой на символьную строку (которая включает десятичную запятую и возможный байт знака) и запоминает строку в buffer. buffer должен быть достаточным для размещения преобразованного значения и конечного нулевого символа, который добавляется автоматически. Если используется размер буфера digits + 1, то функция перезапишет конец буфера. Это происходит потому, что преобразованная строка включает десятичную запятую и может содержать знак и экспоненту. Защита от переполнения не предусмотрена. _gcvt пытается создать числа digits в десятичном формате. Если не удается, он создает числа digits в степенном формате. Замыкающие нули можно отключить при преобразовании.
Буфер buffer длины _CVTBUFSIZE достаточен для любого значения с плавающей запятой.
Эта функция проверяет свои параметры. Если параметр buffer имеет значение NULL, вызывается обработчик недопустимого параметра, как описано в разделе Проверка параметров. Если продолжение выполнения разрешено, функция устанавливает errno в EINVAL и возвращает NULL.
Требования
Подпрограмма |
Обязательный заголовок |
---|---|
_gcvt |
<stdlib.h> |
Дополнительные сведения о совместимости см. в разделе Совместимость во введении.
Пример
// crt_gcvt.c
// compile with: /W3
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main( void )
{
char buffer[_CVTBUFSIZE];
double value = -1234567890.123;
printf( "The following numbers were converted by _gcvt(value,12,buffer):\n" );
_gcvt( value, 12, buffer ); // C4996
// Note: _gcvt is deprecated; consider using _gcvt_s instead
printf( "buffer: '%s' (%d chars)\n", buffer, strlen(buffer) );
value *= 10;
_gcvt( value, 12, buffer ); // C4996
printf( "buffer: '%s' (%d chars)\n", buffer, strlen(buffer) );
value *= 10;
_gcvt( value, 12, buffer ); // C4996
printf( "buffer: '%s' (%d chars)\n", buffer, strlen(buffer) );
value *= 10;
_gcvt( value, 12, buffer ); // C4996
printf( "buffer: '%s' (%d chars)\n", buffer, strlen(buffer) );
printf( "\n" );
value = -12.34567890123;
_gcvt( value, 12, buffer ); // C4996
printf( "buffer: '%s' (%d chars)\n", buffer, strlen(buffer) );
value /= 10;
_gcvt( value, 12, buffer ); // C4996
printf( "buffer: '%s' (%d chars)\n", buffer, strlen(buffer) );
value /= 10;
_gcvt( value, 12, buffer ); // C4996
printf( "buffer: '%s' (%d chars)\n", buffer, strlen(buffer) );
value /= 10;
_gcvt( value, 12, buffer ); // C4996
printf( "buffer: '%s' (%d chars)\n", buffer, strlen(buffer) );
}