• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C言語のtime_tに関して)

C言語でtime_tを使った日付の取得方法について

このQ&Aのポイント
  • C言語にてtime_tを使用して日付を取得する際、日にちの2桁目が0にならず空白となる問題が発生しています。
  • 入力したソースコードに問題がある可能性も考えられますので、ご確認ください。
  • 日にちの2桁目が0にならない原因や解決方法について、教えていただけると幸いです。

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

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

> if((local->tm_mon+1)<=9) > today_month[0]='0'; > if((local->tm_mday+1)<=9) > today_day[0]='0'; こんなことしなくても、sprintfだけで0詰めできます。 sprintf/printfのマニュアルや解説をよく読んでみましょう。 > time_t timer; > struct tm *local; > struct tm *utc; これらは、なぜグローバル変数になっているのでしょうか? 他で使うわけではないので、ローカル変数でいいのでは? > extern char today[20]; > extern char today2[20]; > extern char today_year[10]; これらも、なぜグローバル変数なのでしょうか? ポインタ渡しや返り値を使うのではなく、グローバル変数に結果を返す方がよい、という明確な理由はありますか? > extern char today_month[2]; > extern char today_day[2]; C言語でよくやってしまう間違いです。 何文字までの文字列が収納できるサイズか、よーーーく考えてみましょう。 C言語には、配列の範囲を越えて利用しても、それ自体はエラーにならない、という特徴があります。 しかし、それが「期待通り」に動作するか保証はありません。

shoshin01
質問者

お礼

ご回答ありがとうございます。自分の弱さがしみじみ出ます。

その他の回答 (2)

回答No.3

素朴な疑問なのですが、strftimeを使うのはダメなんでしょうか。 http://msdn.microsoft.com/ja-jp/library/fe06s4ak.aspx 他の回答で指摘されている通り、 ヌル文字を考慮して配列を確保しないとバッファ溢れして他のデータを破壊しますね。 例えば、"abc"はメモリー上ではa b c \0と表現されているので4バイト使うというのは聞いたことありませんか?

shoshin01
質問者

お礼

ご回答ありがとうございます。勉強になりました。

回答No.1

> extern char today_month[2]; > extern char today_day[2]; 2文字格納するには足りなくない? 末尾の'\0'があふれますよ?

shoshin01
質問者

お礼

ご回答ありがとうございます。情けないです。