_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
参数
buffer
存储转换结果的缓冲区。
sizeInBytes
缓冲区的大小。
value
要转换的值。
digits
存储的有效位数。
返回值
如果成功,则返回 0。 如果由于无效参数而导致失败(参见下表中的无效值),会调用无效的参数处理程序,如参数验证中所述。 如果允许执行继续,则返回错误代码。 错误代码是在 ERRNO.h 中定义的。 有关这些错误的列表,请参阅 errno
、_doserrno
、_sys_errlist
和 _sys_nerr
。
错误条件
buffer |
sizeInBytes |
value |
digits |
返回值 | buffer 中的值 |
---|---|---|---|---|---|
NULL |
any | 任意 | any | EINVAL |
未修改。 |
非 NULL (指向有效内存) |
零 | any | any | EINVAL |
未修改。 |
非 NULL (指向有效内存) |
any | 任意 | %> | EINVAL |
未修改。 |
安全性问题
如果 buffer
不指向有效内存且不为 NULL
,_gcvt_s
可生成访问冲突。
注解
_gcvt_s
函数将浮点 value
转换为字符串(它包括小数点和可能的登录字节),并将字符串存储在 buffer
中。 buffer
应足够大以容纳转换后的值加上一个会自动追加的端接空字符。 _CVTBUFSIZE
的缓冲区长度足以满足任何浮点值。 如果使用 digits
+ 1 的缓冲区大小,该函数不会覆盖缓冲区的末尾,因此请确保为此操作提供足够的缓冲区。 _gcvt_s
尝试生成十进制格式的 digits
数字。 如果不能,它会生成指数格式的 digits
数字。 在转换过程中,可以取消零结尾。
在 C++ 中,通过模板重载简化此函数的使用;重载可以自动推导出缓冲区长度,不再需要指定大小参数。 有关详细信息,请参阅安全模板重载。
此函数的调试版本首先使用 0xFD 填充缓冲区。 若要禁用此行为,请使用 _CrtSetDebugFillThreshold
。
默认情况下,此函数的全局状态范围限定为应用程序。 若要更改此行为,请参阅 CRT 中的全局状态。
要求
例程 | 必需的标头 | 可选标头 |
---|---|---|
_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);
}
Converted value: 1.2