windows server 2008上的c++ fopen错误

C++ fopen error on windows server 2008

本文关键字:fopen 错误 c++ 上的 server 2008 windows      更新时间:2023-10-16

我尝试使用函数fopen打开文件"job.ini"是这样的:iniffile = 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:@bcnebatchbin
Database = MYDATABASE
Userid = myuser
Password = mypassword
LanguageId = 2

谢谢

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

我建议你把循环改成这样:

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

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