_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

参数

buffer
存储转换结果的缓冲区。

sizeInBytes
缓冲区的大小。

value
要转换的值。

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 任意 >= sizeInBytes EINVAL 未修改。

安全性问题

如果 buffer 不指向有效内存且不为 NULL_gcvt_s 可生成访问冲突。

注解

_gcvt_s 函数将浮点 value 转换为字符串(它包括小数点和可能的登录字节),并将字符串存储在 buffer 中。 buffer 应足够大以容纳转换后的值加上一个会自动追加的端接空字符。 _CVTBUFSIZE 的缓冲区长度足以满足任何浮点值。 如果使用 digits + 1 的缓冲区大小,该函数不会覆盖缓冲区的末尾,因此请确保为此操作提供足够的缓冲区。 _gcvt_s 尝试生成十进制格式的 digits 数字。 如果不能,它会生成指数格式的 digits 数字。 在转换过程中,可以取消零结尾。

在 C++ 中,通过模板重载简化此函数的使用;重载可以自动推导出缓冲区长度,不再需要指定大小参数。 有关详细信息,请参阅安全模板重载

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

默认情况下,此函数的全局状态范围限定为应用程序。 若要更改此行为,请参阅 CRT 中的全局状态

要求

例程 必需的标头 可选标头
_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);
}
Converted value: 1.2

另请参阅

数据转换
数学和浮点支持
atof_atof_l_wtof_wtof_l
_ecvt_s
_fcvt_s
_gcvt