2009-09-09 12 views
6

私はこの機能を使用すると面白い問題があります。 私は次のようにそれを使用する:sprintf_s problem

int nSeq = 1; 
char cBuf[8]; 
int j = sprintf_s(cBuf, sizeof(cBuf), "%08d", nSeq); 

そして、私は例外を取得するたびに。例外はbuffer to smallです。 関数の2番目のフィールドをsizeof(cBuf)+ 1に変更したとき

8バイトをコピーしたいだけで、8バイトの配列を持っているのであれば、なぜ追加する必要がありますか?

答えて

10

あなたのバッファには8か所が含まれています。文字列には、8文字のが含まれています。

+0

バッファのサイズを1ずつ増やす必要がありますか? –

+1

はい。 1は正確にヌルターミネータのサイズです。私のコードでは、この余分な文字の場所が必要であるという事実を強調するために、文字通り 'char cBuf [8 + 1]'と書いています。 – xtofl

+1

'char [sizeof(" 00000000 ")]'を使用しました。 – MSalters

1

すべてのsprintf関数は、文字列を終了するためにnullを追加します。実際にはあなたの文字列は9文字です。 8バイトのテキストと最後のゼロ

+0

バッファのサイズを1ずつ増やす必要がありますか? –

2

文字列は、%08dのために '\ 0'と8バイトのデータ(00000001)を終了する必要があります。 サイズを9にする必要があります。