_ecvt_s
转换 double 数字转换为字符串。 这是 _ecvt 的版本与安全增强的 CRT中的安全功能如中所述。
errno_t _ecvt_s(
char * _Buffer,
size_t _SizeInBytes,
double _Value,
int _Count,
int *_Dec,
int *_Sign
);
template <size_t size>
errno_t _ecvt_s(
char (&_Buffer)[size],
double _Value,
int _Count,
int *_Dec,
int *_Sign
); // C++ only
参数
[out] _Buffer
使用指针加载对数字字符串,转换的结果。[in] _SizeInBytes
缓冲区的大小 (以字节为单位)。[in] _Value
将转换的数字。[in] _Count
存储的位数。[out] _Dec
存储请小数点位置。[out] _Sign
转换数字的符号。
返回值
零,如果成功。 ,如果有错误,则返回值是错误代码。 错误代码。 Errno.h 定义。 有关更多信息,请参见 errno、_doserrno、_sys_errlist和_sys_nerr。
一旦无效参数,如下表中,此函数调用的参数无效处理程序,如 参数验证所述。 如果执行允许继续,此功能设置 errno 到 EINVAL 并返回 EINVAL。
错误状态
_Buffer |
_SizeInBytes |
_Value |
_Count |
_Dec |
_Sign |
返回值 |
在 buffer的值 |
---|---|---|---|---|---|---|---|
NULL |
任何 |
任何 |
任何 |
任何 |
任何 |
EINVAL |
不修改。 |
不是 NULL (指向有效的内存) |
AMP_LT=0 |
任何 |
任何 |
任何 |
任何 |
EINVAL |
不修改。 |
任何 |
任何 |
任何 |
任何 |
NULL |
任何 |
EINVAL |
不修改。 |
任何 |
任何 |
任何 |
任何 |
任何 |
NULL |
EINVAL |
不修改。 |
安全问题
,如果 buffer 不指向有效的内存而不是 NULL,_ecvt_s 可能发生访问冲突。
备注
_ecvt_s 函数将浮点数转换为字符字符串。 _Value 参数是要转换的浮点数。 此函数存储到 count_Value 数字为字符串并追加 null 字符 (“\ 0 ")。 如果数字个数在 _Value 所基于的 _Count,低位数舍入。 如果小于 count 数字有,该字符串填充零。
仅可在该字符串存储。 位置),并 _Value 的符号可以从 _Dec 和 _Sign 获取在调用之后。 _Dec 参数指向给定位置的整数值小数点有关该字符串的开头。 0 或负整数值指示在第一个数字的小数点集。 _Sign 参数指向指示所转换的数字符号的整数。 如果整数值为 0,该数字为正数的。 否则,该数字为负。
缓冲区长度 _CVTBUFSIZE 为所有浮点值就足够了。
在 _ecvt_s 和 _fcvt_s 之间的差异。 _Count 参数的解释。 _ecvt_s 解释 _Count ,当数字的总数在输出字符串的,因此,而 _fcvt_s 解释 _Count 作为数字个数在以后小数点。
在 C++ 中,使用此函数由模板重载简化;重载可以自动推断缓冲区长度,而无需指定范围参数。 有关更多信息,请参见 安全模板重载。
此函数的 " debug " 版本用 0xFD 首先加载缓冲区。 若要禁用此行为,请使用 _CrtSetDebugFillThreshold。
要求
功能 |
必需的头 |
可选标头 |
---|---|---|
_ecvt_s |
stdlib.h |
errno.h |
有关更多兼容性信息,请参见中介绍的 兼容性 。
示例
// ecvt_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 = _ecvt_s(buf, _CVTBUFSIZE, 1.2, 5, &decimal, &sign);
if (err != 0)
{
printf("_ecvt_s failed with error code %d\n", err);
exit(1);
}
printf("Converted value: %s\n", buf);
}