_ecvt_s
將轉換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
參數
[out] _Buffer
填滿將指標移至字串的數字,轉換的結果。[in] _SizeInBytes
緩衝區的大小以位元組為單位。[in] _Value
以指定須轉換的數字。[in] _Count
儲存的數字數目。[out] _Dec
預存的十進位小數點位置。[out] _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的數字,字串以零填補。
只有數字會儲存在字串中。 小數點和的正負號的位置_Value可以取自_Dec和_Sign呼叫後。 _Dec參數指向提供相對於字串開頭的小數點位置的整數值。 0 或負值的整數值,表示小數點位於左邊的第一個數字。 _Sign參數指向指示轉換的數字的正負號的整數。 整數值為 0,如果是正數。 否則,數值為負數。
緩衝區長度的**_CVTBUFSIZE**就已足夠浮點數值。
之間的差異**_ecvt_s和_fcvt_s中的轉譯工作_Count參數。 _ecvt_s解譯_Count作為輸出字串中的數字總數而_fcvt_s**解譯_Count的小數位數。
在 C++ 中,使用這項功能已經過簡化的範本多載。 多載可以緩衝區長度自動推斷,而不必指定 size 引數。 如需詳細資訊,請參閱 安全範本多載。
偵錯版本,此函式的第一次填滿與 0xFD 的緩衝區。 若要停用這種情形,請使用_CrtSetDebugFillThreshold。
需求
Function |
所需的標頭 |
選擇性標頭 |
---|---|---|
_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);
}