• ベストアンサー

int型をchar型に(右詰で)代入したい

皆様いつもお世話になってマス(^^; 今回はint型の整数をchar型に(右詰で)入れる方法について int counter = 100; char input_kaisuu[10]; counter++; ↑今カウンターは101です。 これを「input_kaisuu」に右詰で設定したいのです。 "0000000101"←結果としてこんなかんじに。 ------------------------------------------------- ちなみにこんなことをやってみました。 sprintf(input_kaisuu, "%d", counter); このやり方だと左詰で"1010000000"というようになってしまい、 全然違う数になってしまいました。(^^; 他にいい方法があれば教えてください!

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

%d を %09d にすると、お望みのものが出せます。 10進数で、9桁で表示する。表示する数字が9桁以下のときは先頭に0を表示する。 といった意味です。 10桁入れたいときは、char input_kaisuu[11] としてくださいね。 #文字列の終わりを表す文字も入れなきゃいけないので

techtak
質問者

お礼

回答ありがとうございました。 今まで出力用書式フラグの事を知らずにいました。 結果 char input_kaisuu[11]として、 %010dとすることで、解決できました。

techtak
質問者

補足

なるほど! では、「10進数で、10桁で表示する。表示する数字が10桁以下のときは先頭に0を表示する。」 としたい時は、%010d とすれば良いのですか?

その他の回答 (3)

  • ranx
  • ベストアンサー率24% (357/1463)
回答No.4

「回答」は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')が入って いたのだと思います。

techtak
質問者

お礼

ご指摘の通りです。 16進で確認したところ101の後ろにはNULL文字が入っていました。 不適切な質問で正確な回答は返ってきませんよね。 次回からは問題を正確に把握してから質問したいとおもいます。 ありがとうございました。

  • natural
  • ベストアンサー率37% (419/1115)
回答No.3

ありゃ、回答がダブってしまいました。 回答欄を開いたときは0件だったんですが…。(^_^; お詫びに補足を。 sprintf(input_kaisuu, "10%d", counter); とすると、0埋め無しで右詰になりますよ。(^_^) (勿論この場合も'\0'分の領域は用意して下さいね)

techtak
質問者

お礼

補足ありがとうございます。(^^;

  • natural
  • ベストアンサー率37% (419/1115)
回答No.2

sprintf(input_kaisuu, "010%d", counter); では如何でしょうか。 但しinput_kaisuuは'\0'分も含めて11以上の配列にして下さいね。(^_^)

関連するQ&A