问题依旧啊。char msg[1000];之后我就
memset(msg,0,1000);了,这和ZeroMemory(msg,1000);一样啊

解决方案 »

  1.   

    楼上说的对,最后一个必须为NULL
      

  2.   

    wjyasd:还是 “烫烫烫烫烫烫烫烫烫烫烫烫烫烫....”
    难道计算机真的觉得很烫?????????
      

  3.   

    字串符给数组后
     int n=strlen(aa);
     aa[n]=0;
    可以。
      

  4.   

    我觉得应该是
    aa[n]=NULL;
    或者
    aa[n]='\0';
      

  5.   

    wjyasd:      你查找“msg[1000]”    就能找到6处。
      

  6.   

    这个问题不是出在 msg[1000] 身上。我把下面的代码改成了:
    char msg[50];
    memset(msg,'\0',50);
    sprintf(msg,"  %-12s  %08X ",(PSTR)dosHeader + bidRVA + pibid->OffsetModuleName,pibid->TimeDateStamp);
    ListMsg(msg);

    pibfr = MakePtr(PIMAGE_BOUND_FORWARDER_REF,pibid,sizeof(IMAGE_BOUND_IMPORT_DESCRIPTOR));
    for(i=0;i<pibid->NumberOfModuleForwarderRefs;i++)
    {
    char msg[50];
    memset(msg,'\0',50);
    sprintf(msg,"  forwarder:  %-12s  %08X ",dosHeader + bidRVA + pibfr->OffsetModuleName,pibfr->TimeDateStamp);
    ListMsg(msg);
    pibfr++;
    pibid = MakePtr(PIMAGE_BOUND_IMPORT_DESCRIPTOR,pibid,sizeof(IMAGE_BOUND_FORWARDER_REF));
    }
    pibid++;
    }
    ListMsg("----");明显,你得到的正确的字符串显示是50 的大小。但是你的“烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫....” 好长呀……我怀疑是你其它的地方出的问题, 在看看!
      

  7.   

    It maybe have a wrong on the scope of the CString value!
      

  8.   

    111222: 是这里的毛病
    把 ::PostMessage(m_hwnd,WM_PECHECK,(WPARAM)lpctstr,NULL);改成: ::SendMessage(m_hwnd,WM_PECHECK,(WPARAM)lpctstr,NULL);就可以了……  和 char msg[1000] 或者 char msg[50] 没有关系
      

  9.   

    另外,问一句: PIMAGE_DOS_HEADER dosHeader;
    PIMAGE_NT_HEADERS ntHeader;这两个结构的参考资料在什么地方?  MSDN 中没有?   ^&^
      

  10.   

    太奇怪了,为什么????为什么PostMessage会出现乱码?????我想知道为什么......那两个东东定义在 WINNT.H 里面。
      

  11.   

    因为post是马上返回,这时可能还未取到你所要的值,或只取了部分。
    而send是需要等消息后才返回,所以~
      

  12.   

    同意kevin_wang(kevin神) 的看法
      

  13.   

    我觉得是数据绑定的类型错了,
    建议 char msg[1000]; 改为TCHAR msg[1000]因为我刚重装了机,还没有来得急装vc6没有办法调试,只能先提个建议!
    我在用ado写数据库的时候,遇到过烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫的问题
    最后的结果就是数据绑定类型错了!
      

  14.   

    如果char msg[1000]; 是个临时变量,
    PostMessage(m_hwnd,WM_PECHECK,(WPARAM)lpctstr,NULL);
    所在函数执行后lpcstr就被释放了,所以会很"烫"
    如果是全局变量则不会“烫”.
    不过全局变量太多了也不好,特别是有时会有很多消息,有时消息传递的是复杂的结构。
    也可以这样:
    char *msg;
    msg = (char*)malloc();
    ...PostMessage....在消息处理后释放msg
      

  15.   

      将 CPECheck::ListMsg 中 的 PostMessage 换成 SendMessage 就 ok 了
      

  16.   

    因为“烫”字的内码是“0xCCCC”,而VC在Debug Build时生成的函数在建立局部变量的空间时会用"0xCCCC"填充每一个局部变量空间的字节,对于msg[???]的情况,很正常被Debugger认成N个“烫”
      

  17.   

    有那么麻烦吗?
    char msg[1000] = ""; 
      

  18.   

    {
    char msg[50];
    memset(msg,'\0',50);
    sprintf(msg,"  forwarder:  %-12s  %08X ",dosHeader + bidRVA + pibfr->OffsetModuleName,pibfr->TimeDateStamp);
    ListMsg(msg);
    pibfr++;
    pibid = MakePtr(PIMAGE_BOUND_IMPORT_DESCRIPTOR,pibid,sizeof(IMAGE_BOUND_FORWARDER_REF));
    //在这里,你的msg【】被人(系统)删除了
    }