char buf[64]; ← 通常のプログラムでも、事前に出力サイズが判らない場合、「結 果を全て受け取る事ができる大凡のサイズ」でバッファを確保す ・ る事がありますが、原理的にはこれと同じです。 ・ ・ sprintf(buf,"結果:%s\n",pszResult); ・ ・ ・毎回最大値・最小値の文字数を調べるようにすると、かなり時間が掛かってしまうので、別のツールで先に調べておくと、実際のプログラムに文字列長調査を実装せずに済みます。
例.最大文字列長を調べるツール 数値幅が大きいと時間が掛かります #include <stdio.h> #include "fixedX.h" #include "fixutil.h" #define BIT 128 #define SIZE (BIT / 8) #define RADIX 10 /* 調査対象の基数 */ void main(void ) { FIXEDVAL test[SIZE],work[SIZE]; int cnt; /* 符号付きの場合は SIGNEDVAL を定義してください */ #ifdef SIGNEDVAL /* 負の最大値 */ memset(test,0,SIZE-1); test[SIZE-1] = 0x80; cnt = fixedutil_signed_num2str_cntsize(test,SIZE,RADIX,work); #else /* 絶対値の最大 */ memset(test,0xff,SIZE); cnt = fixedutil_unsigned_num2str_cntsize(test,SIZE,RADIX,work); #endif printf("文字数:%d\n",cnt); }
変数の数値幅 (bit) | signed 最大文字列長 (バイト) | unsigned 最大文字列長 (バイト) |
32 | 11 | 10 |
64 | 20 | 20 |
128 | 40 | 39 |
256 | 78 | 78 |
512 | 155 | 155 |
1,024 | 309 | 309 |
2,048 | 618 | 617 |
4,096 | 1,234 | 1,234 |
8,192 | 2,467 | 2,467 |
16,384 | 4,933 | 4,933 |
32,768 | 9,865 | 9,865 |
65,536 | 19,730 | 19,729 |
131,072 | 39,458 | 39,457 |
262,144 | 78,914 | 78,914 |
524,288 | 157,828 | 157,827 |
1,048,576 | 315,654 | 315,653 |
2,097,152 | 631,307 | 631,306 |
4,194,304 | 1,262,613 | 1,262,612 |
8,388,608 | 2,525,224 | 2,525,223 |