_fcvt_s

将浮点数转换为字符串。 此函数的版本是 _fcvt,具有 CRT 中的安全功能中所述的安全增强功能。

语法

errno_t _fcvt_s(
   char* buffer,
   size_t sizeInBytes,
   double value,
   int count,
   int *dec,
   int *sign
);
template <size_t size>
errno_t _fcvt_s(
   char (&buffer)[size],
   double value,
   int count,
   int *dec,
   int *sign
); // C++ only

参数

buffer
所提供的缓冲区将保留转换的结果。

sizeInBytes
缓冲区的大小(字节)。

value
要转换的数字。

count
小数点后面的数字位数。

dec
指向存储的小数点位置的指针。

sign
指向存储的符号指示符的指针。

返回值

如果成功,则返回 0。 如果失败,则返回值为错误代码。 错误代码是在 errno.h 中定义的。 有关这些错误的列表,请参阅 errno_doserrno_sys_errlist_sys_nerr

当存在无效参数(见下表)时,此函数会调用无效参数处理程序,如参数验证中所述。 如果允许执行继续,则该函数将 errno 设置为 EINVAL 并返回 EINVAL

错误条件

buffer sizeInBytes value count dec sign 返回值 buffer 中的值
NULL any any 任意 任意 任意 EINVAL 未修改。
NULL(指向有效内存) <=0 any any any any EINVAL 未修改。
任意 任意 any any NULL any EINVAL 未修改。
any any any 任意 any NULL EINVAL 未修改。

安全问题

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

注解

_fcvt_s 函数将浮点数转换为以 null 结尾的字符串。 value 参数是要转换的浮点数。 _fcvt_svalue 的位数存储为字符串,并追加一个空字符 ('\0')。 count 参数指定此小数点后要存储的数字位数。 多余的位数被舍入到 count 位置。 如果小于精确到 count 的位数,则字符串使用零填充。

字符串中仅存储位数。 小数点位置和 value 的符号可以在调用后从 decsign 中获取。 dec 参数指向整数值;此整数值指定相对于字符串开头的小数点的位置。 零或负整数值表示小数点位于第一个数字的左侧。 参数 sign 指向一个整数值,表示 value 的符号。 如果 value 为正数,则整数设置为 0,如果 value 为负数,则整数设置为非零数。

_CVTBUFSIZE 的缓冲区长度足以满足任何浮点值。

_ecvt_s_fcvt_s 之间的差异在于对 count 参数的解释。 _ecvt_scount 解释为输出字符串中的数字总位数,_fcvt_scount 解释为小数点后面的数字位数。

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

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

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

要求

函数 必需的标头 可选标头
_fcvt_s <stdlib.h> <errno.h>

有关兼容性的详细信息,请参阅 兼容性

库:C 运行时库的所有版本。

示例

// fcvt_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 = _fcvt_s(buf, _CVTBUFSIZE, 1.2, 5, &decimal, &sign);

    if (err != 0)
    {
        printf("_fcvt_s failed with error code %d\n", err);
        exit(1);
    }

    printf("Converted value: %s\n", buf);
}
Converted value: 120000

另请参阅

数据转换
数学和浮点支持
atof_atof_l_wtof_wtof_l
_ecvt_s
_gcvt_s
_fcvt