- ベストアンサー
int型をchar型に(右詰で)代入したい
皆様いつもお世話になってマス(^^; 今回はint型の整数をchar型に(右詰で)入れる方法について int counter = 100; char input_kaisuu[10]; counter++; ↑今カウンターは101です。 これを「input_kaisuu」に右詰で設定したいのです。 "0000000101"←結果としてこんなかんじに。 ------------------------------------------------- ちなみにこんなことをやってみました。 sprintf(input_kaisuu, "%d", counter); このやり方だと左詰で"1010000000"というようになってしまい、 全然違う数になってしまいました。(^^; 他にいい方法があれば教えてください!
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
%d を %09d にすると、お望みのものが出せます。 10進数で、9桁で表示する。表示する数字が9桁以下のときは先頭に0を表示する。 といった意味です。 10桁入れたいときは、char input_kaisuu[11] としてくださいね。 #文字列の終わりを表す文字も入れなきゃいけないので
その他の回答 (3)
- ranx
- ベストアンサー率24% (357/1463)
「回答」はcherry moonさんとnaturalさんにおまかせして、質問の文章の中に、恐らく techtakさんが誤解されていると思われる個所がありますので、注意を喚起しておきます。 > sprintf(input_kaisuu, "%d", counter); > このやり方だと左詰で"1010000000"というようになってしまい とはならないはずです。(ライブラリがバグっていない限り) この場合、配列の1番目から3番目(添字の0~2)に"101"が入り、4番目に'\0'が入ります。 '0'と'\0'は同じではありません。後者はゼロですが、前者は48という値(16進数で30) で'0'という文字を表します。また、配列の5番目から最後までに入る値は定義されていません。 親切な実装ならゼロを入れてくれるかもしれませんが、一般的には、前に使った時のゴミが 入っている場合が多いです。今回は、多分、最初なのでゼロ('0'ではなく'\0')が入って いたのだと思います。
お礼
ご指摘の通りです。 16進で確認したところ101の後ろにはNULL文字が入っていました。 不適切な質問で正確な回答は返ってきませんよね。 次回からは問題を正確に把握してから質問したいとおもいます。 ありがとうございました。
- natural
- ベストアンサー率37% (419/1115)
ありゃ、回答がダブってしまいました。 回答欄を開いたときは0件だったんですが…。(^_^; お詫びに補足を。 sprintf(input_kaisuu, "10%d", counter); とすると、0埋め無しで右詰になりますよ。(^_^) (勿論この場合も'\0'分の領域は用意して下さいね)
お礼
補足ありがとうございます。(^^;
- natural
- ベストアンサー率37% (419/1115)
sprintf(input_kaisuu, "010%d", counter); では如何でしょうか。 但しinput_kaisuuは'\0'分も含めて11以上の配列にして下さいね。(^_^)
お礼
回答ありがとうございました。 今まで出力用書式フラグの事を知らずにいました。 結果 char input_kaisuu[11]として、 %010dとすることで、解決できました。
補足
なるほど! では、「10進数で、10桁で表示する。表示する数字が10桁以下のときは先頭に0を表示する。」 としたい時は、%010d とすれば良いのですか?