將 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
已轉換數字的正負號。
傳回值
如果成功,則為零。 如果失敗,傳回的值會是錯誤碼。 錯誤碼於 Errno.h 中定義。 如需詳細資訊,請參閱errno, _doserrno, _sys_errlist和_sys_nerr.
如果有無效的參數,如下表所列,此函式會叫用無效的參數處理程式,如參數驗證中所述。 如果允許繼續執行,此函式會將 設定 errno 為 EINVAL,並傳 EINVAL回 。
錯誤條件
buffer |
sizeInBytes |
value |
count |
dec |
sign |
傳回值 | buffer 中的值 |
|---|---|---|---|---|---|---|---|
NULL |
任意 | 任意 | 任意 | 任意 | 任意 | EINVAL |
未修改。 |
非 NULL (指向有效的記憶體) |
<=0 | 任意 | 任意 | 任意 | 任意 | EINVAL |
未修改。 |
| 任意 | 任意 | 任意 | 任意 | NULL |
任意 | EINVAL |
未修改。 |
| 任意 | 任意 | 任意 | 任意 | 任意 | NULL |
EINVAL |
未修改。 |
安全性問題
_ecvt_s 如果 buffer 未指向有效的記憶體且不是 NULL,則可能會產生存取違規。
備註
_ecvt_s 函式會將浮點數轉換為字元字串。 value 參數是要轉換的浮點數。 此函式最多可將 count 位數的 value 儲存為字串,並在結尾處附加 null 字元 ('\0')。 如果 value 的位數超過 count,則會將低位數四捨五入。 如果少於 count 個位數,則以零填補字串。
字串中只能儲存數字。 呼叫之後,可從 dec 和 sign 取得小數點位置和 value 的正負號。 dec 參數指向整數值,並提供字串開頭的小數點位置。 0 或負整數值表示小數點位於第一位數字的左邊。 sign 參數指向表示已轉換數字正負號的整數。 如果整數值為 0,則數字為正數。 否則,數字為負數。
長度 _CVTBUFSIZE 的緩衝區足可供任何浮點值使用。
_ecvt_s 和 _fcvt_s 之間的差異位於 count 參數解譯中。 _ecvt_s 將 count 解譯為輸出字串的位數總數,而 _fcvt_s 將 count 解譯為小數點後的位數。
C++ 中,使用這個函式已為範本多載簡化;多載可自動推斷緩衝區長度,因而不需要指定大小引數。 如需詳細資訊,請參閱安全範本多載。
此函式的偵錯版本會先將緩衝區填入0xFE。 若要停用此行為,請使用 _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
另請參閱
資料轉換
數學與浮點支援
atof、 、 _atof_l、 _wtof_wtof_l
_ecvt
_fcvt_s
_gcvt_s