_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
参数
[out] buffer
存储转换结果的缓冲区。[in] sizeInBytes
缓冲区的大小。[in] value
要转换的值。[in] 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 |
any |
>= sizeInBytes |
EINVAL |
未被修改 |
安全问题
如果 buffer 不指向有效的内存和不是 NULL,_gcvt_s 可能会发生访问冲突。
备注
_gcvt_s 函数将浮点 value转换为字符字符串( 包含小数点和一种符号字节),并存储在buffer中。 buffer 应该足够大以容纳转换的值和自动追加的终止 null 字符。 长度为 _CVTBUFSIZE 的缓冲区足够存储任意浮点值。 如果 1 + 使用缓冲区大小,digits 函数不会覆盖缓冲区末尾的,因此,为确保提供此操作的一个满足的缓冲区。 _gcvt_s 尝试产生十进制格式的digits数值。 如果不能,它产生指数格式digits的数值。 在转换中尾随零转换可能被抑制。
在 C++ 中,使用这些函数是由重载模板简化;该重载可以自动推断缓冲区长度,而无需指定范围参数。 有关更多信息,请参见安全模板重载。
这些函数的调试版本首先用 0xFD 填充缓冲区。 若要禁用此行为,请使用 _CrtSetDebugFillThreshold。
要求
例程 |
必需的标头 |
可选标头 |
---|---|---|
_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);
}