我有以下程序,
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位数。