LPTSTR pszHostName;
   LPTSTR pszTmp;   CString strTmp;//自定义函数 CString GetNetName(LPCTSTR str);1)strTmp = GetNetName((LPCTSTR)m_ListCtrl.GetItemText(iItemNum, 4));
   pszTmp = (LPTSTR)(LPCTSTR)strTmp;2)pszHostName = (LPTSTR)(LPCTSTR)GetNetName((LPCTSTR)m_ListCtrl.GetItemText(iItemNum, 4));如上 1)和 2)的 pszTmp ,pszHostName 的结果应该是一样的吧,但是在我程序里跑出的结果是 1)正确,2)空结果
 

解决方案 »

  1.   

    pszHostName = (LPTSTR)(LPCTSTR)GetNetName((CString)m_ListCtrl.GetItemText(iItemNum, 4)); 
    LPCTSTR改成CString应该可以
      

  2.   

    pszHostName = (LPTSTR)(LPCTSTR)GetNetName((LPCTSTR)m_ListCtrl.GetItemText(iItemNum, 4)); 因为GetNetName返回一个临时的CString对象,这句执行完成之后,这个临时的CString对象已经不存在了,你把pszHostName指向一个无效的地址,这是不对的。strTmp = GetNetName((LPCTSTR)m_ListCtrl.GetItemText(iItemNum, 4)); 
    这个是正确。因为strTmp保存了GetNetName返回的临时CString对象。
      

  3.   

     To: vivvan(行走江湖): no good 呵呵
      

  4.   

    返回值需要一个接收空间char *pszTmp[128]="";
    strcpy((LPTSTR)(LPCTSTR)GetNetName((CString)m_ListCtrl.GetItemText(iItemNum, 4)));
      

  5.   

    返回值需要一个接收空间 char *pszTmp[128]=""; 
    strcpy((LPTSTR)(LPCTSTR)GetNetName((CString)m_ListCtrl.GetItemText(iItemNum, 4)));同意楼上的说法。一般基于CString都可以直接做转换
      

  6.   

    strTmp = m_ListCtrl.GetItemText(iItemNum, 4)); 
    pszTmp = (LPTSTR)(LPCTSTR)strTmp; 
    直接强制转换就可以了,没必要调用GetName().
      

  7.   

    CString 和 char* 的转换跟编译器也有关系.
      

  8.   

    To 8 楼:GetNetName 是自定义函数,获取我想要的串的,理解错了哦,呵呵
    综合大家的意见及网上查询基本理解了,谢谢各位