控制权转移绕过初始化:

时间:2017-01-12 00:54:33

标签: c++

基本上,我尝试使用OPENFILENAME打开txt文件,但它会输出文件的目录。我希望它输出txt文件的内容。

我的代码存在问题;这是:

OPENFILENAME ofn;
char szFile[100];

ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = NULL;
ofn.lpstrFile = szFile;
ofn.lpstrFile[0] = '\0';
ofn.nMaxFile = sizeof(szFile);
ofn.lpstrFilter = "All\0*.*\0Text\0*.TXT\0";
ofn.nFilterIndex = 1;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;

GetOpenFileName(&ofn);

std::string line = " ";

fstream infile;
infile.open(ofn.lpstrFile);

Print(ofn.lpstrFile);

这会产生错误:
error

所有帮助将不胜感激,谢谢。

std::string line = " ";

fstream infile;
infile.open(ofn.lpstrFile);

Print(ofn.lpstrFile);

是问题。

编辑:

LRESULT CALLBACK DLLWindowProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
    case WM_COMMAND:
        switch (wParam)
        {
        case MYMENU_OPENSCRIPT:
            OPENFILENAME ofn;
            char szFile[100];

            ZeroMemory(&ofn, sizeof(ofn));
            ofn.lStructSize = sizeof(ofn);
            ofn.hwndOwner = NULL;
            ofn.lpstrFile = szFile;
            ofn.lpstrFile[0] = '\0';
            ofn.nMaxFile = sizeof(szFile);
            ofn.lpstrFilter = "All\0*.*\0Text\0*.TXT\0";
            ofn.nFilterIndex = 1;
            ofn.lpstrFileTitle = NULL;
            ofn.nMaxFileTitle = 0;
            ofn.lpstrInitialDir = NULL;
            ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;

            GetOpenFileName(&ofn);

            std::string line = " ";

            fstream infile;
            infile.open(ofn.lpstrFile);

            Print(ofn.lpstrFile);

            break;

1 个答案:

答案 0 :(得分:1)

为了在switch语句的一个案例中包含局部变量,您需要创建一个新块。

在下文中,y仍在case 1标签后的范围内,因此当x为1时,将绕过y的初始化。这是不允许的;在C ++中,应该已经初始化了范围内的变量。

switch (x) {
  case 0:
    int y = 42;
    // ...
  case 1:
    // ...
}

要解决此问题,请添加额外的大括号,以便case 0拥有自己的范围,y中无法显示case 1

switch (x) {
  case 0: {
    int y = 42;
    // ...
  }
  case 1: {
    // ...
  }
}