第141章 _ecvt, _fcvt関数のセキュリティ強化版


_ecvtや_fcvt関数は、double型の数値を文字列に変換します。



これらの、セキュリティ強化バージョンが_ecvt_s, _fcvt_s関数です。

VS2005以降でないと使えません。

errno_t _ecvt_s( 
   char * _Buffer,
   size_t _SizeInBytes,
   double _Value,
   int _Count,
   int *_Dec,
   int *_Sign
);
_Bufferは結果を格納するバッファです。

_SizeInBytesは、バッファサイズ(バイト)です。

_Valueは、変換される数値です。

_Countは、格納する桁数です。

_Decは、小数点の位置を格納する変数のアドレスです。小数点が先頭から何文字目に有るかを示します。

_Signは、プラス、マイナスを表す符号を格納する変数へのポインタです。正の数の場合は0、そうでないときは負を表します。

では、簡単なサンプルを見てみましょう。

/* ecvt01.c */

#include <stdio.h>
#include <stdlib.h>

int main()
{
	double d1 = -10.25613, d2 = 0.058;
	char buf[16];
	int dec, sign;

	_ecvt_s(buf, sizeof(buf), d1, 12, &dec, &sign);
	printf("%s  dec= %d, sign = %d\n", buf, dec, sign);

	_ecvt_s(buf, sizeof(buf), d2, 12, &dec, &sign);
	printf("%s  dec= %d, sign = %d\n", buf, dec, sign);

	return 0;
}
実行結果は次のようになります。



次は、_fcvt_s関数ですが、次のように定義されています。

errno_t _fcvt_s( 
   char* buffer,
   size_t sizeInBytes,
   double value,
   int count,
   int *dec,
   int *sign 
);
ほとんど_ecvt_s関数と同じです。どこが違うかというと、countが小数点以下の桁数を指定する点です。

では、サンプルのプログラムを見てみましょう。

/* fcvt01.c */

#include 
#include 

int main()
{
	double f1 = -1.23456789, f2 = 123.45;
	char buf[16];
	int dec, sign;

	_fcvt_s(buf, sizeof(buf), f1, 1, &dec, &sign); 
	printf("%s dec = %d, sign = %d\n", buf, dec, sign);
	_fcvt_s(buf, sizeof(buf), f2, 4, &dec, &sign);
	printf("%s dec = %d, sign = %d\n", buf, dec, sign);

	return 0;
}
実行結果は次のようになります。

特に、面倒なことはないですね。




[Index][総合Index] [Previous Chapter] [Next Chapter]

Update Sep/12/2007 By Y.Kumei
当ホーム・ページの一部または全部を無断で複写、複製、 転載あるいはコンピュータ等のファイルに保存することを禁じます。