_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
存储的有效位数。
返回值
零,如果成功。 如果失败会由于一个无效参数 (对于无效值参见下表),无效参数调用处理程序 参数验证如中所述。 如果执行允许继续,错误代码返回。 错误代码。 Errno.h 定义。 有关列出了这些错误,请参见 errno、_doserrno、_sys_errlist和_sys_nerr。
错误状态
buffer |
sizeInBytes |
value |
digits |
Return |
在 buffer的值 |
---|---|---|---|---|---|
NULL |
任何 |
任何 |
任何 |
EINVAL |
不修改。 |
不是 NULL (指向有效的内存) |
零 |
任何 |
任何 |
EINVAL |
不修改。 |
不是 NULL (指向有效的内存) |
任何 |
任何 |
AMP_GT= sizeInBytes |
EINVAL |
不修改。 |
安全问题
,如果 buffer 不指向有效的内存而不是 NULL,_gcvt_s 可能发生访问冲突。
备注
_gcvt_s 函数将浮点 value 为包括小数点和一个可能的符号字节) 的字符字符串 (并存储在 buffer的字符串。 buffer 应足以容纳转换的值以及一个 null 字符),自动追加。 缓冲区长度 _CVTBUFSIZE 为所有浮点值就足够了。 如果 + 1 使用 digits 的缓冲区大小,函数不会复盖缓冲区末尾的,因此,确保提供此操作的足够的缓冲区。 _gcvt_s 会尝试生成 digits 数字以十进制格式。 如果不能,它导致 digits 数字以指数格式。 显示尾随零可以在转换过程中被取消。
在 C++ 中,使用此函数由模板重载简化;重载可以自动推断缓冲区长度,而无需指定范围参数。 有关更多信息,请参见 安全模板重载。
此函数的 " debug " 版本用 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);
}