为什么fclose会出错

dulvtianya 2009-07-23 04:08:55
TCHAR szTempFile [MAX_PATH];
CString szTempPath="C:\\";
UINT nResult=GetTempFileName (szTempPath, _T ("~ex"),0,szTempFile);


int ret=URLDownloadToFile(NULL,"http://www.ip138.com/ip2city.asp",szTempFile,BINDF_GETNEWESTVERSION,NULL);
if (ret==S_OK) //如果下载成功
{
FILE *f;
f=fopen(szTempFile,"rb");
if(f)
{
fseek(f,0,SEEK_END);//得到文件大小
int ilength=ftell(f);
fseek(f,0,SEEK_SET);

if(ilength>0)
{

char *szIP[32];
ZeroMemory(szIP,sizeof(szIP));
fread(szIP,ilength,1,f);
fclose(f); //这个地方会导致程序错误关闭
//DeleteFile("ip.ini");
CString csIp;
csIp.Format("外网IP:%s",szIP);

//SetDlgItemText(IDC_EDIT_IP,csIp);
//fclose(f);
return csIp;

}
}

}
else
//SetDlgItemText(IDC_EDIT_IP,"Error!");
return "ERROR";
...全文
342 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
hahanibc 2009-10-08
  • 打赏
  • 举报
回复
TCHAR szTempFile [MAX_PATH];
CString szTempPath="C:\\";
UINT nResult=GetTempFileName (szTempPath, _T ("~ex"),0,szTempFile);


int ret=URLDownloadToFile(NULL,"http://www.ip138.com/ip2city.asp",szTempFile,BINDF_GETNEWESTVERSION,NULL);
if (ret==S_OK) //如果下载成功
{
FILE *f;
f=fopen(szTempFile,"rb");
if(f)
{
fseek(f,0,SEEK_END);//得到文件大小
int ilength=ftell(f);
fseek(f,0,SEEK_SET);

if(ilength>0)
{

char *szIP[32];
ZeroMemory(szIP,sizeof(szIP));
fread(szIP,ilength,1,f);
fclose(f); //这个地方会导致程序错误关闭
//DeleteFile("ip.ini");
CString csIp;
csIp.Format("外网IP:%s",szIP);

//SetDlgItemText(IDC_EDIT_IP,csIp);
//fclose(f);
return csIp;

}
}

}
else
//SetDlgItemText(IDC_EDIT_IP,"Error!");
return "ERROR";
Kalivn 2009-07-23
  • 打赏
  • 举报
回复

TCHAR szTempFile [MAX_PATH];
CString szTempPath("C:\\");
CString sztemp("http://www.ip138.com/ip2city.asp");
UINT nResult=GetTempFileName (szTempPath, _T ("~ex"),0,szTempFile);
int ret=URLDownloadToFile(NULL,sztemp,szTempFile,BINDF_GETNEWESTVERSION,NULL);
if (ret==S_OK) //如果下载成功
{
FILE *f;
f=fopen((char*)szTempFile,"rb");
if(f)
{
fseek(f,0,SEEK_END);//得到文件大小
int ilength=ftell(f);
fseek(f,0,SEEK_SET);
if(ilength>0)
{

char *szIP = new char[ilength+1];
ZeroMemory(szIP,sizeof(szIP));
fread(szIP,ilength,1,f);
fclose(f); //这个地方会导致程序错误关闭
delete [] szIP;
//DeleteFile("ip.ini");
}
}
}

改好了,试下吧~
gg606 2009-07-23
  • 打赏
  • 举报
回复
//char *szIP[32]; //这里为什么要用指针数组?这真是你想要的吗?
char szIP[32]; //你要的是这个吧?
ZeroMemory(szIP,sizeof(szIP));
fread(szIP,ilength,1,f);
fclose(f);
pady_pady 2009-07-23
  • 打赏
  • 举报
回复
在close加fflush(f)试试
dulvtianya 2009-07-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bohut 的回复:]
char *szIP[32];  //?????????
------------
改成:char *pBuf = new char[ilength+1];
记得最后
if(pBuf)
{
  delete pBuf;
  pBuf = null;
}
[/Quote]
改了还是不好用,是fclose(f);出错,
pady_pady 2009-07-23
  • 打赏
  • 举报
回复
szIP是一个二级指针,大小为四字节,你这样读不溢出了?
bohut 2009-07-23
  • 打赏
  • 举报
回复
char *szIP[32]; //?????????
------------
改成:char *pBuf = new char[ilength+1];
记得最后
if(pBuf)
{
delete pBuf;
pBuf = null;
}

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧