重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

VC6.0であるプログラムを作成し、自PCでのRelese版のテストも合格したので、他PCで同じようなテストをしたところ、うまく動作しませんでした。
自PCでは、他PCで発生した不具合がどうしても発生しませんでした。
プログラム事態は、あるファイルからデータを読み込んで保存し、必要なときにそのデータか、0をファイルに出力するというものです。
いろいろ試して原因がわかったのですが、正常に動作するように修正したあと、試しに原因だった箇所を、元の状態に戻して自PCで試したところ、他PCで発生した不具合が再現しました。ちなみに、再現する前までは、Debug版、Relese版の実行ファイルは共に、自PCでは正常に動作していました。

このような現象の原因を知りたいので、心当たりがある方、是非教えてください。

原因だった処理は以下のようなものでした。

FILE* fp;
CString Data;
(省略)
Data.Format("%-10.1lf",0); //←「0」を「0.0」に直すと
              //正常に動作した
if(iRet = fwrite(Data, Data.GetLength(), 1, fp) == 1) {
(省略)
}

A 回答 (1件)

可変個引数に値を渡すとき、


0はint型
0.0はdouble型
として関数に渡ります。

VC6.0ということなので、
int型は4バイト
double型は8バイト
の領域を取ります。

書式指定文字列は"%f"なのでdouble型を期待して引数から8バイトの領域をアクセスします。
int型を渡したときは4バイトしか領域がないので後半の4バイトは何に使われているか分からない領域です。
何に使われているか分からない領域なのでたまたま上手く動くときもあるし動かないときもあります。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/08/07 23:34

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!