小弟初学MFC,在弄一个简单的学生管理系统,添加了一个对话框用于添加学生信息,然后在Add按钮添加了消息响应函数,对输入的数据进行写入到文件之中,但
是在判断是否读完的时候总是会出现问题,请教各位,代码如下:
void Add::OnClickedIdbAdd()
{
// TODO: Add your control notification handler code here
UpdateData();
if (!m_aComp || !m_aEng || !m_aMath || !m_aGym || !m_aName || !m_aSno || !m_aMajor ){
MessageBox(_T("请完善信息后再确认输入!"));
return;
}
CStdioFile csf;
if (!csf.Open(_T("D:\\SIMS.txt"),
CFile::modeCreate | CFile::modeNoTruncate | CFile::modeReadWrite)){
#if def_DEBUG
afxDump << "unable to open file" << "\n";
exit(1);
#endif
}
int strlen = m_aSno.GetLength();
char* strSno = "";
CString strtemp;
csf.SeekToBegin();
while (csf.Read(strSno, strlen)){ //每次运行到这里出问题
if (m_aSno == strSno){
MessageBox(_T("该学号已存在,请重新输入。"));
m_aSno = "";
UpdateData(FALSE);
return;
}
csf.ReadString(strtemp);
}
csf.SeekToEnd();
strtemp.Format(_T("%s %s %s %d %d %d %d\n"),
m_aSno, m_aName, m_aMajor, m_aMath, m_aComp, m_aEng, m_aGym);
csf.WriteString(strtemp);
csf.Close();
}
出现的问题如下:
不知道这个怎么办?本人小白,很多都不懂,请大家多多指教。谢谢!
你的strSno没分配空间,只是一个指针,程序访问出错了。你需要new来分配。
char* strSno = "";
->
char strSno[100];
想简单一些,且如果知道读数据的最大长度,可以将 strSno 定义为数组。
没有分配空间是正解,我补充一点: 都用到 CStdioFile了,为啥不用CString呢?
CString不能喝char*那样比较,CString是一个类,里面有很多内容,char*只是一个指针
char* strSno = "";
没有分配空间~
也碰到过这个问题,跟着学习了。。。
char* strSno = ""; //内存
CString strtemp;
csf.SeekToBegin();
while (csf.Read(strSno, strlen)){