sprintf バッファ サイズの決定 - 標準は何ですか?



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 それだけ。このような単純なケースではやり過ぎです。