_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
    存储的有效位数。

返回值

零,如果成功。如果失败会由于一个无效参数 (对于无效值参见下表),无效参数调用处理程序 参数验证如中所述。如果执行允许继续,错误代码返回。错误代码。 Errno.h 定义。有关列出了这些错误,请参见 errno、_doserrno、_sys_errlist和_sys_nerr

错误状态

buffer

sizeInBytes

value

digits

Return

在 buffer的值

NULL

任何

任何

任何

EINVAL

不修改。

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

任何

任何

EINVAL

不修改。

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

任何

任何

AMP_GT= sizeInBytes

EINVAL

不修改。

安全问题

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

备注

_gcvt_s 函数将浮点 value 为包括小数点和一个可能的符号字节) 的字符字符串 (并存储在 buffer的字符串。buffer 应足以容纳转换的值以及一个 null 字符),自动追加。缓冲区长度 _CVTBUFSIZE 为所有浮点值就足够了。如果 + 1 使用 digits 的缓冲区大小,函数不会复盖缓冲区末尾的,因此,确保提供此操作的足够的缓冲区。_gcvt_s 会尝试生成 digits 数字以十进制格式。如果不能,它导致 digits 数字以指数格式。显示尾随零可以在转换过程中被取消。

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

此函数的 " debug " 版本用 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