_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 |
any |
any |
any |
EINVAL |
未修改。 |
不是 NULL (指向有效的記憶體) |
零 |
any |
any |
EINVAL |
未修改。 |
不是 NULL (指向有效的記憶體) |
any |
any |
>= sizeInBytes |
EINVAL |
未修改。 |
安全性問題
如果 buffer 沒有指向有效的記憶體且不是 NULL , _gcvt_s 會發生存取被拒。
備註
_gcvt_s 函式轉換浮點數 value 為一個字元字串 (包含小數點和可能的正負號位元組) 並將字串儲存於 buffer 。buffer 必須足以容納轉換後的值加上末尾的空字元,空字元會被自動加入。足夠容納任何浮點數值的 _CVTBUFSIZE 長度的緩衝區。如果使用了 digits + 1 大小的緩衝區,函式將不會覆寫緩衝區的末尾,所以請確認為此操作提供了足夠的緩衝區。_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);
}