解决方案 »

  1.   

    PostMessage是逻辑线程异步发给界面线程而你使用的CString或者char数组都是局部变量,PostMessage后这些局部变量生命周期已过,而PostMessage就是传的局部变量的地址.....楼主应该new一个堆上的内存如:
    char* pszRecv = new char[200];memset(pszRecv ,0,200);sprintf_s(szRecv, "%s 说:%s", (char *)inet_ntoa(addrRecv.sin_addr), (char *)szBuf);strRecv.Format("%s 说:%s",(char *)inet_ntoa(addrRecv.sin_addr), (char *)szBuf);::PostMessage(hWnd, WM_RECVMSG, 0, (LPARAM)pszRecv );在LRESULT CChatDlg::OnRecvData(WPARAM wParam, LPARAM lParam)函数使用pszRecv 后 delete[] pszRecv ;即可
      

  2.   

    char szRecv[200] = { 0 };// 方式2
    改成char* szRecv=new char[200];
      

  3.   

    很可能是 szRecv 在后面的运行中没有改变地址中的值,所以还可以显示正常