• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Visual Cのstat構造体の動作)

Visual Cのstat構造体の動作について

このQ&Aのポイント
  • stat構造体をprintf系の関数で出力するとき、Visual Cでは二つ目の変数が正常に出力できない現象が発生します。
  • stat構造体のtime_t型変数をprintf系関数で出力する場合、その変数以降に続けて出力する他の変数が正常に出力できなくなることがあります。
  • printfの書式通りに出力されないだけで、変数の中身は壊れていません。この現象は、Visual Studio 2012および2013のVisual Cで発生します。

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

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

time_tは2038年問題の対処として64bitに拡張された処理系が多くなっています。 time_tが64bit、intが32bitの場合、printfの書式として"%d"を指定してtime_tの値を渡すと、printfはtime_tの最初の32bitだけを整数として処理して、残りの32bitが残った状態になります。"%d"に続けて他の書式を指定していると、printfは残った32bit分のデータが次の書式のデータだとして処理するため、データがずれて正しい表示ができなくなります。 printfの書式の最後がtime_tのデータの場合は、32bit分残ったデータがあっても使われないだけなので、動作に支障がないように見えます。

yohmi88
質問者

お礼

ご回答ありがとうございます。これで解決しました。 vcは他のC 言語とは実装が違っていたのですね。 恥ずかしながら、64bitの可能性を失念していました。 sizeof()で確認しておくべきでした。 本当にありがとうございます。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.1

異常動作ではありません。 time_t型を"%d"で出力しようとしているからです。 time_t型がint型とサイズか同じか調べてみてください。 HP-UXが動作しているコンピュータのCPUはItanium系ですか?

yohmi88
質問者

お礼

ご回答ありがとうございます。 vcのTime_tが64bitであることに気づいていませんでした。 HPーUXはご想像の通りItaniumで動いています。

すると、全ての回答が全文表示されます。

関連するQ&A