_ecvt_s
double の文字列に数値を変換します。この関数は、「CRT のセキュリティ機能」に説明されているように、_ecvt のセキュリティが強化されたバージョンです。
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
変換された数値のサイン。
戻り値
正常に終了した場合は 0 を返します。エラーが発生した場合の戻り値はエラー コードです。エラー コードは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 は出力文字列の値の合計数として _fcvt_s の後に小数点以下の桁数として _Count を解釈する場合は _Count を解釈します。
この関数を使用してC++ ではテンプレートのオーバーロードによって簡略化 ; オーバーロードではバッファー長を自動的に推論できるためサイズ引数を指定する必要がなくなります。詳細については、「セキュリティ保護されたテンプレート オーバーロード」を参照してください。
この関数のデバッグ バージョンは最初にバッファーを 0xFD で埋めます。この動作を無効にするには、_CrtSetDebugFillThreshold を使用します。
必要条件
Function |
必須ヘッダー |
オプション ヘッダー |
---|---|---|
_ecvt_s |
<stdlib.h> |
<errno.h> |
互換性の詳細については、「C ランタイム ライブラリ」の「互換性」を参照してください。
使用例
// 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);
}