问题描述:
下面有2段代码,分别属于不同的类,代码1报错(附图1,附图2),代码2正常运行,将代码1copy出来调试,依然报错,将代码2copy出来调试,正常运行,将代码2改为代码1,运行正常,将运行正常的代码1copy到程序中,运行正常。原因不明。
代码3为自己提供缓冲区,可解决代码1报错问题。
保存对话框代码1:
CString TestFile;
LPCSTR lpszFilter = "Test Files(*.txt)|*.txt||";
CFileDialog aDlg(false, ".txt", NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, lpszFilter);
aDlg.m_ofn.lpstrTitle = "Save";
if (aDlg.DoModal() == IDOK)
{
TestFile = aDlg.GetPathName();
}
else
return;
打开对话框代码2:
CString TestFile;
LPCSTR lpszFilter = "Test Files(*.txt)|*.txt||";
CFileDialog aDlg((true, ".txt", NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, lpszFilter);
aDlg.m_ofn.lpstrTitle = "Open";
if (aDlg.DoModal() == IDOK)
{
TestFile = aDlg.GetPathName();
}
else
return;
代码3:参考 http://www.cppcns.com/ruanjian/c/92283.html
CString TestFile;
LPCSTR lpszFilter = "Test Files(*.txt)|*.txt||";
CFileDialog aDlg(false, ".txt", NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, lpszFilter);
const int MIN_FILE_NUMBER = 10; //至少允许选择10个文件
aDlg.m_ofn.lpstrFile = new TCHAR[_MAX_PATH * MIN_FILE_NUMBER]; //重新定义缓冲区大小
memset(aDlg.m_ofn.lpstrFile, 0, _MAX_PATH * MIN_FILE_NUMBER); //初始化定义的缓冲区
aDlg.m_ofn.nMaxFile = _MAX_PATH * MIN_FILE_NUMBER;
if (aDlg.DoModal() == IDOK)
{
POSITION pos = aDlg.GetStartPosition();
while (NULL != pos)
{
TestFile = aDlg.GetPathName();//获取文件名
//使用文件...
}
}
delete[] aDlg.m_ofn.lpstrFile; //最后别忘了释放内存
代码1报错-图1
代码1报错-图2-中断位置