_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
参数
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
,_ecvt_s
可能会生成访问冲突。
备注
_ecvt_s
函数将浮点数转换为字符串。 value
参数是要转换的浮点数。 此函数最多存储 count
位 value
作为字符串,并追加空字符 ('\0')。 如果 value
中的数字位数超过 count
,则低位数字被舍入。 如果数字位数少于 count
,则字符串使用零来填充。
字符串中仅存储位数。 小数点位置和 value
的符号可以在调用后从 dec
和 sign
中获取。 dec
参数指向整数值;此整数值给定相对于字符串开头的小数点的位置。 0 或负整数值表示小数点位于第一个数字的左侧。 sign
参数指向一个整数,表示转换后的数字的符号。 如果整数值为 0,则数值为正值。 否认,数值为负值。
_CVTBUFSIZE
的缓冲区长度足以满足任何浮点值。
_ecvt_s
和 _fcvt_s
之间的差异在于对 count
参数的解释。 _ecvt_s
将 count
解释为输出字符串中的数字总位数,而 _fcvt_s
将 count
解释为小数点后面的数字位数。
在 C++ 中,通过模板重载简化此函数的使用;重载可以自动推导出缓冲区长度,不再需要指定大小参数。 有关详细信息,请参阅安全模板重载。
此函数的调试版本首先使用 0xFD 填充缓冲区。 若要禁用此行为,请使用 _CrtSetDebugFillThreshold
。
默认情况下,此函数的全局状态范围限定为应用程序。 若要更改此行为,请参阅 CRT 中的全局状态。
要求
函数 | 必需的标头 | 可选标头 |
---|---|---|
_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);
}
Converted value: 12000