int を次のように変換する場合:
char a[256];
sprintf(a, "%d", 132);
a の大きさを判断する最善の方法は? すべきですか?手動で設定しても問題ないと思いますが(どこでも使用されているのを見てきました)、どれくらいの大きさにすべきですか? 32 ビット システムで可能な最大の int 値は何ですか?また、その場でそれを特定するトリッキーな方法はありますか?
答え:
int で可能な最大ビット数は CHAR_BIT * sizeof(int)
です 、および 10 進数は少なくとも 3 ビットの「価値がある」ため、任意の int
に必要なスペースの上限は緩い (CHAR_BIT * sizeof(int) / 3) + 3
です .この +3 は、除算の際に切り捨てられたという事実に 1 つ、符号に 1 つ、ヌル ターミネータに 1 つです。
「32 ビット システムで」という場合は、int
を知っていることを意味します。 が 32 ビットの場合、12 バイトが必要です。数字に 10、記号に 1 つ、ヌル ターミネータに 1 つ。
特定のケースでは、変換される int は 132
です 、4バイト必要です。バダム、ティッシュ。
妥当な境界で固定サイズのバッファーを使用できる場合、固定サイズのバッファーはより単純なオプションです。上記の境界が妥当であることを謙虚に提出します (32 ビット int
の 12 ではなく 13 バイト) 、および 64 ビット int
の 21 ではなく 23 バイト )。しかし難しい場合、C99 では snprintf
を呼び出すだけで済みます。 サイズを取得するには、malloc
それだけ。このような単純なケースではやり過ぎです。