0

関数 fopen を使用してファイル「job.ini」を開こうとすると、次のようになります。

デバッグ、ファイルが開かれ、次を使用してファイルからデータを読み取ろうとします: fgets(buffer, STR_SIZE, iniFile);

Windows Server 2003(32ビット)を搭載したPCでこのプログラムを(デバッグモードで)実行すると、これは完全に機能します。Windows Server 2008 R2 (64 ビット) で実行しようとすると、iniFile の読み取りが正しくないようです。ループ読み取りファイル:

  do{
    fgets(buffer, STR_SIZE, iniFile);
    if(strncmp(buffer, section, strlen(section)) == 0) return TRUE;
  }while(!feof(iniFile));

無限です...

Windows Server 2008 (64 ビット) ではなく Windows Server 2003 (32 ビット) で動作する理由を知っている人はいますか?

job.ini ファイルの抜粋:

[job]
ErrorPath = e:\@\bcne\batch\bin\
Database = MYDATABASE
Userid = myuser
Password = mypassword
LanguageId = 2

ありがとうございました

4

1 に答える 1

0

その理由は、ファイルの終わりフラグがafterが失敗するまで設定されていないためである可能性があります。つまり、未定義のバッファーの内容で呼び出すことになります。 fgetsstrcncmp

ループを次のように変更することをお勧めします。

while (fgets(buffer, STR_SIZE, iniFile))
{
    if (strncmp(buffer, section, strlen(section)) == 0)
        return TRUE;
}

fgetsまた、 が読み取った改行をバッファーに保持することも忘れないでください。つまり、 が文字列と一致するsectionために改行も含まれている必要があります。strncmp

于 2013-05-24T11:29:36.950 に答える