我有以下程序,

int iIndex=0;
char cPort[5]={"\0"};
char cFileChar;
fopen_s(&fFile,"c:\\Config\\FileName.txt","r");
if(fFile !=0)
{
  cFileChar = getc(fFile);
  while (cFileChar!= EOF)
  {
    cPort[iIndex]=cFileChar;
    iIndex++;
    cFileChar = getc(fFile);
  }
iDIPort=atoi(cPort);
}

在文件中我有32000个,但是当程序执行并从文件中读取时,有时它的读取是正确的,并将iDIPort设置为32000,但有时它将变量值设置为320000。
请帮我解决这个问题。

最佳答案

将5个字符写入cPort数组。没关系。然后,使用cPort作为atoi函数的参数。此函数需要以C 0结尾的字符串作为参数。由于cPort变量没有空间存储此零值字符以指示字符串的结尾,因此代码取决于内存中cPort变量后面的内容。
解决问题的最简单方法是将cPort定义为6个字符的数组,并在调用0之前将cPort[5]赋给atoi。但这并不能解决代码的其他问题,主要是不要检查从文件中读取的数字是否超过5位数。

10-04 16:25