从文件保存对话框返回文件名(windows32)

rem*_*acp 0 c++ winapi wstring savefiledialog

我有一个简单的保存文件对话框,我希望将其用作返回文件路径,名称和扩展名的工具.此函数产生运行时错误,表示文件名周围的堆栈已损坏.我希望像这样使用它:

wchar_t filename[] = L"";
newGradebookDialog( hwnd, filename );
Run Code Online (Sandbox Code Playgroud)

这是我的功能.它按照我的预期修改了文件名,但运行时堆栈错误是我没有得到的.

void newGradebookDialog( HWND hwnd, wchar_t file[] )
{
 OPENFILENAME ofn;

 wchar_t saveFileName[MAX_PATH] = L"";

 ZeroMemory( &ofn, sizeof( ofn ) );

 ofn.lStructSize = sizeof(OPENFILENAME);
 ofn.hwndOwner = hwnd;
 ofn.lpstrFilter = L"Database File (*.db)\0*.db\0";
 ofn.lpstrFile = saveFileName;
 ofn.nMaxFile = MAX_PATH;
 ofn.lpstrDefExt = L"db";
 ofn.Flags  = OFN_EXPLORER | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT;
 ofn.lpstrTitle = L"Save New Database";

 if(GetSaveFileName(&ofn))
  wcscpy(file,saveFileName);
}
Run Code Online (Sandbox Code Playgroud)

Han*_*ant 9

 wchar_t filename[] = L"";
Run Code Online (Sandbox Code Playgroud)

这是一个包含一个元素的数组.您正在将更大的字符串复制到其中,这会破坏堆栈帧.固定:

 wchar_t filename[MAX_PATH] = {0};
Run Code Online (Sandbox Code Playgroud)