_gcvt_s

转换浮点值到字符串。 _gcvt 的一些版本提供安全增强功能(如 CRT 中的安全功能所述)。

errno_t _gcvt_s( 
   char *buffer,
   size_t sizeInBytes,
   double value,
   int digits 
);
template <size_t cchStr>
errno_t _gcvt_s( 
   char (&buffer)[cchStr],
   double value,
   int digits 
); // C++ only

参数

  • [out] buffer
    存储转换结果的缓冲区。

  • [in] sizeInBytes
    缓冲区的大小。

  • [in] value
    要转换的值。

  • [in] digits
    存储的有效位数。

返回值

如果成功,是0。 如果发生失败由于无效的参数为无效值 (请参见下表),则参数的处理程序调用。参数验证所述。 如果允许代码继续执行,则返回错误代码。 错误代码在Errno.h中被定义。 有关这些错误的列表,请参阅errno、_doserrno、_sys_errlist 和 _sys_nerr

错误情况

buffer

sizeInBytes

value

digits

返回

buffer中的值

NULL

any

any

any

EINVAL

未被修改

不是 NULL (指向有效的内存)

any

any

EINVAL

未被修改

不是 NULL (指向有效的内存)

any

any

>= sizeInBytes

EINVAL

未被修改

安全问题

如果 buffer 不指向有效的内存和不是 NULL,_gcvt_s 可能会发生访问冲突。

备注

_gcvt_s 函数将浮点 value转换为字符字符串( 包含小数点和一种符号字节),并存储在buffer中。 buffer 应该足够大以容纳转换的值和自动追加的终止 null 字符。 长度为 _CVTBUFSIZE 的缓冲区足够存储任意浮点值。 如果 1 + 使用缓冲区大小,digits 函数不会覆盖缓冲区末尾的,因此,为确保提供此操作的一个满足的缓冲区。 _gcvt_s 尝试产生十进制格式的digits数值。 如果不能,它产生指数格式digits的数值。 在转换中尾随零转换可能被抑制。

在 C++ 中,使用这些函数是由重载模板简化;该重载可以自动推断缓冲区长度,而无需指定范围参数。 有关更多信息,请参见安全模板重载

这些函数的调试版本首先用 0xFD 填充缓冲区。 若要禁用此行为,请使用 _CrtSetDebugFillThreshold

要求

例程

必需的标头

可选标头

_gcvt_s

<stdlib.h>

<error.h>

有关更多兼容性信息,请参见简介中的兼容性

示例

// crt_gcvt_s.c
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>

int main()
{
  char buf[_CVTBUFSIZE];
  int decimal;
  int sign;
  int err;

  err = _gcvt_s(buf, _CVTBUFSIZE, 1.2, 5);
  
  if (err != 0)
  {
     printf("_gcvt_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_s

_fcvt_s

_gcvt