你的BYTE demDrt; 和CString变量的定义是不是相邻
如果是那就可能是溢出造成CString变量被改写

解决方案 »

  1.   

    调试版貌似所有的变量都会开辟新内存放,优化的release会在局部变量实用完之后回收内存。个人理解,不一定正确。我遇到过debug下面变量有值release下面为空的情况。
      

  2.   

    BYTE demDrt定义是在读文件的内部,CString变量的定义是在读文件之前;
    这样吧,我把OnInitDialog里大概的源代码贴出来吧:
    CDialog::OnInitDialog(); FILE *fp = fopen("log.txt","rt");
    char lj[512];
    fscanf(fp,"%s",lj);  //获取*.prj文件路径
    fclose(fp); CString prjpath,prjname;
    prjpath.Format("%s",lj);
    prjpath = prjpath.Left(prjpath.ReverseFind('\\')+1);  //获取*.prj父窗口路径 char *fn = strrchr(lj,'\\');
    fn++;
    char *f = strrchr(fn,'.');
    strcpy(f,"\0");
    prjname.Format("%s",fn);  //获取prj文件文件名(不带后缀)

    CString datfile = prjpath+prjname+".dat";
    CFileFind findfile;
    BOOL bFind = findfile.FindFile(datfile);
    if(bFind)
    {
    FILE *pf1 = fopen(datfile,"rt");
    fscanf(pf1,...);
    ...
    BYTE demDrt;
    fscanf(pf1,"%d",&demDrt); //就是这里读完之后,prjname值为空
    AfxMessageBox(prjname);
    ...
    fclose(pf1); UpdateData(FALSE);
    } CString cpdfile = prjpath+"product\\"+prjname+".dem.cpd";
    bFind = findfile.FindFile(cpdfile);
    if(bFind)
    {
    FILE *pf2 = fopen(cpdfile,"rt");
    fscanf(pf2,...);
    ...
    fclose(pf2);
    UpdateData(FALSE);
    }

    return TRUE; if(bFind)
    {
    FILE *pf2 = fopen(cpdfile,"rt");
    ...
    fscanf(pf2,...);
    ...
    fclose(pf2);
    UpdateData(FALSE);
    }

    return TRUE;