Share via


_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

參數

buffer
填入轉換結果的位數字串指標。

sizeInBytes
以位元組為單位的 緩衝區大小。

value
要轉換的數字。

count
儲存的位數。

dec
儲存的小數點位置。

sign
已轉換數字的正負號。

傳回值

如果成功,則為零。 如果失敗,傳回值就是錯誤碼。 錯誤碼於 Errno.h 中定義。 如需詳細資訊,請參閱errno, _doserrno, _sys_errlist_sys_nerr.

如果有不正確參數,如下表所列,此函式會叫用不正確參數處理常式,如參數驗證 中所述 。 如果允許繼續執行,此函式會將 設定 errnoEINVAL ,並傳 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 個位數,則以零填補字串。

字串中只能儲存數字。 呼叫之後,可從 decsign 取得小數點位置和 value 的正負號。 dec 參數指向整數值,並提供字串開頭的小數點位置。 0 或負整數值表示小數點位於第一位數字的左邊。 sign 參數指向表示已轉換數字正負號的整數。 如果整數值為 0,則數字為正數。 否則,數字為負數。

長度 _CVTBUFSIZE 的緩衝區足可供任何浮點值使用。

_ecvt_s_fcvt_s 之間的差異位於 count 參數解譯中。 _ecvt_scount 解譯為輸出字串的位數總數,而 _fcvt_scount 解譯為小數點後的位數。

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