我有以下程序,
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);
}
Run Code Online (Sandbox Code Playgroud)
在我有32000的文件中,但是当程序执行并从文件中读取时,其读取正常并将iDIPort设置为32000但有时它将变量值设置为320000.
请帮我解决这个问题.
您将5个字符写入cPort数组.没关系.但是,您使用cPort作为atoi函数的参数.此函数需要一个C zero-terminated-string作为参数.由于您的cPort变量没有空间来存储此零值char以指示字符串的结尾,因此您的代码取决于内存中cPort变量之后的内容.
解决问题的最简单方法是将cPort定义为6个字符的数组,并在调用之前分配0给它.但这不会解决代码的其他问题,主要是不检查从文件中读取的数字是否超过5个数字.cPort[5]atoi