Windows Server 2008上的C ++ fopen错误

时间:2013-05-24 11:20:38

标签: c++ fopen fgets

我尝试使用函数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

谢谢

1 个答案:

答案 0 :(得分:0)

可能的原因是 fgets失败后之前未设置文件结束标志,这意味着您将调用{{ 1}}带有未定义的缓冲区内容。

我建议你把循环更改为:

strcncmp

另请注意,while (fgets(buffer, STR_SIZE, iniFile)) { if (strncmp(buffer, section, strlen(section)) == 0) return TRUE; } 会将其读取的换行符保留在缓冲区中,这意味着fgets也必须包含section的换行符以匹配字符串。