2011-10-26 7 views
2

sprintfを使用してint、stringおよびintを追加しようとしました。C Sprintf()はジャンク文字を追加します

sprintf(str,"%d:%s:%d",count-1,temp_str,start_id); 

ここで、start_idの値は常に同じです。 char *であるtemp_strの値は毎回増加します。私はしばらく正しい出力を得てから、私のsprintfはtemp_strとstartidの間に迷惑な文字を印刷し始めます。だから私のstrは腐敗する。

誰でもこの動作を説明できますか?

例えば数11

11に

:1:2:3:1:2:3:1:2:3:1:21:1:3:1:2:3: 2:3:1:2:3:1:2:3:1:2:3:1:2:3:1:2:3:1:2:3:1:2:3:1:2: 3:1:2:3:1:2:3:1:2:3:1:2:3:1:2:3:1:2:3:1:2:3:1:2:3: 1:2:3:1:2:3:1:2:3:1:2:3:1:2:3:1:2:3:1:2:3:1:2

atカウント8

8:1:2:3:1:2:3:1:2:3:1:21:3:1:2:3:1:2:3:1:2:3: 1:2:3:1:2:3:1:2:3:1:2:3:1:2:3:1:2:3:1:2:3:1:2:3:1: 2:3:1:2:3:1:2:3:1:2:3:1:2:3:1:2:3:1:2:3:1:2:3:1:2: 3:1:2:3:1:2:3:1:2:3:1:2:3:1:2:3: 1:2:3:1:2なぜ、どのように「」文字列に追加され

+0

すべての変数といくつかのコードの定義を投稿してください。たぶん 'str'は十分に高くないかもしれません。 –

+1

sprintfを使用している時間の少なくとも99%は、snprintfを実際に使用しているはずです。 –

答えて

0

1> 0でmemsetをごstrのバッファにしてみてくださいsprintf

2>毎回char *となるtemp_strの値が増加します これはどういう意味ですか?

これはいくつかの文字列を指します通常charachterポインタであるべきであり、すべての3つの引数をコーミングによって合計サイズが超過されるべきではない>という文字列がをヌル終了されるべきであり、THAは

3をstrにコピーされますstrバッファーのサイズ

+0

ありがとうございました。 –

3

どちらのtemp_strがnullで終わるいくつかの点ではないか、あなたが吹きました、私は理解していない

バッファがstrであり、他のメモリアクセスが影響を与えています。

コードが表示されていないと少し難しいですが、strのサイズを倍にして問題の動作が変更された場合は、おそらく後者です。

0

文字列temp_strはNULで終了していないようです。あなたはsprintfへの呼び出しの前に、それを終了、またはあなたが印刷する長さを知っていれば、このような%.*sフォーマット演算子を使用することができ、次のいずれか使用してbefor

int str_len = ...;  // Calculate length of temp_str 
sprintf(str, "%d:%.*s:%d", count-1, str_len, temp_str, start_id); 
+0

'strlen'で' temp_str'の長さを計算しないようにしてください:-) – paxdiablo

0

あなたはtemp_strの終了を実行しています。あなたの境界を確認し、それがヌル終了していることを確認してください。あなたが終わりまで太陽を増やすのを止めなさい。

+0

ありがとうございました。 –

関連する問題