0

我尝试使用 fopen 函数打开文件“job.ini”:iniFile = fopen("job.ini", "r");

调试,文件被打开,然后我尝试从文件中读取数据: 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 2003(32 位)而不是 Windows Server 2008(64 位)?

job.ini 文件的提取:

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

谢谢你

4

1 回答 1

0

原因可能是文件结束标志直到失败后才 fgets设置,这意味着您将strcncmp使用未定义的缓冲区内容进行调用。

我建议您将循环更改为:

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

另请记住,fgets将读取的换行符保留在缓冲区中,这意味着section还必须包含换行符strncmp以匹配字符串。

于 2013-05-24T11:29:36.950 回答