OPENFILENAME有关问题,

OPENFILENAME问题,急急急!
OPENFILENAME ofn;
TCHAR szPath[MAX_PATH];
ZeroMemory(szPath, sizeof(szPath)); //为什么没有这句程序运行就什么都没显示,求解释
ZeroMemory(&ofn, sizeof(OPENFILENAME));
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = hwnd;
ofn.lpstrFilter = TEXT("应用程序\0*.exe\0*.*\0*.*\0\0");
ofn.lpstrFile = szPath;
ofn.nMaxFile = MAX_PATH;
ofn.lpstrInitialDir = NULL;
ofn.Flags = OFN_DONTADDTORECENT | OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | OFN_NONETWORKBUTTON | OFN_PATHMUSTEXIST;
if (GetOpenFileName(&ofn)) {
  MessageBox(hwnd, szPath, TEXT("提示"), MB_OK);
}

------解决方案--------------------
因为在执行弹出这个窗口的时候,要使用szPath做为一个条件,使窗口的直接定位到szPath那里,如果szPath为随机数据,就无法定位,窗口就弹不出来了。

------解决方案--------------------
ZeroMemory(szPath, sizeof(szPath)); 
应该是申请空间,并初始化为0的意思。如果申请了一部分内存区域,没有初始化的话,我只知道在调试状态下是用0XCC来填充的,方便越界检查,如果实在release状态下应该是随即的数据吧,有可能是以前堆栈的残余,会导致程序的错误跳转,有可能。
------解决方案--------------------
C/C++ code
    // TODO: Add your control notification handler code here
    OPENFILENAME ofn;
    TCHAR szPath[MAX_PATH];
    //ZeroMemory(szPath, sizeof(szPath)); //为什么没有这句程序运行就什么都没显示,求解释
    _tcscpy( szPath, _T( "C:\\Windows\\system32\\Drivers\\etc\\*" ) );
    ZeroMemory(&ofn, sizeof(OPENFILENAME));
    ofn.lStructSize = sizeof(OPENFILENAME);
    ofn.hwndOwner = this->GetSafeHwnd();
    ofn.lpstrFilter = TEXT("应用程序\0*.exe\0*.*\0*.*\0\0");
    ofn.lpstrFile = szPath;
    ofn.nMaxFile = MAX_PATH;
    ofn.lpstrInitialDir = NULL;
    ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | OFN_NONETWORKBUTTON | OFN_PATHMUSTEXIST;
    if (GetOpenFileName(&ofn)) {
        MessageBox(szPath, TEXT("提示"), MB_OK);
    }