_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 | EINVAL |
未修改。 |
any | 任意 | 任意 | 任意 | NULL |
any | EINVAL |
未修改。 |
any | 任意 | 任意 | 任意 | any | NULL |
EINVAL |
未修改。 |
安全问题
如果 buffer
不指向有效内存且不为 NULL
,_fcvt_s
可能会生成访问冲突。
注解
_fcvt_s
函数将浮点数转换为以 null 结尾的字符串。 value
参数是要转换的浮点数。 _fcvt_s
将 value
的位数存储为字符串,并追加一个空字符 ('\0')。 count
参数指定此小数点后要存储的数字位数。 多余的位数被舍入到 count
位置。 如果小于精确到 count
的位数,则字符串使用零填充。
字符串中仅存储位数。 小数点位置和 value
的符号可以在调用后从 dec
和 sign
中获取。 dec
参数指向整数值;此整数值指定相对于字符串开头的小数点的位置。 零或负整数值表示小数点位于第一个数字的左侧。 参数 sign
指向一个整数值,表示 value
的符号。 如果 value
为正数,则整数设置为 0,如果 value
为负数,则整数设置为非零数。
_CVTBUFSIZE
的缓冲区长度足以满足任何浮点值。
_ecvt_s
和 _fcvt_s
之间的差异在于对 count
参数的解释。 _ecvt_s
将 count
解释为输出字符串中的数字总位数,_fcvt_s
将 count
解释为小数点后面的数字位数。
在 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