关于LPSTR、LPCSTR 跟 LPTSTR、LPCTSTR和CString

关于LPSTR、LPCSTR 和 LPTSTR、LPCTSTR和CString
void fun(CString &strTempPath)
{
  GetTempPath(_MAX_PATH, (LPTSTR)(LPCTSTR)strTempPath); //得到系统temp文件夹目录
  if (strTempPath.IsEmpty()) return; 

  //判断目录是否以反斜杠结尾
  int nPos = strTempPath.ReverseFind(TCHAR('\\'));
  //加入反斜杠
  if (-1 == nPos || nPos != strTempPath.GetLength()-1)
strTempPath+= _T("\\"); 
}

为啥执行完GetTempPath(_MAX_PATH, (LPTSTR)(LPCTSTR)strTempPath);的时候strTempPath是有值的,
但是if (strTempPath.IsEmpty()) return;这边它又会退出呢?

补充下:GetTempPath(DWORD..., LPTSTR...)这个API函数的第二个参数是LPTSTR类型的

该如何做呢?
一定要
char csTempPath[_MAX_PATH];
GetTempPath(_MAX_PATH, csTempPath);
  strTempPath.Format(_T("%s"), csTempPath);
这样写吗?
有没有其它的方法可以直接使用strTempPath这个变量操作的


哪位大哥知道的告诉我下,谢谢
如果可以的话把CString的以它们之间的转换也贴给我,谢谢


------解决方案--------------------
该如何做呢?
一定要
char csTempPath[_MAX_PATH];
GetTempPath(_MAX_PATH, csTempPath);
strTempPath.Format(_T("%s"), csTempPath);
这样写吗?
有没有其它的方法可以直接使用strTempPath这个变量操作的

可以的,CString的设计者很厉害,很多以前用字符串(字符数组)去做的工作,现在都可以用CString来代劳,但我们一定要理解工作原理.
C/C++ code

    CString strTempPath;
    
    GetTempPath(_MAX_PATH,strTempPath.GetBuffer(_MAX_PATH));
    strTempPath.ReleaseBuffer();
    if (strTempPath.IsEmpty())
    {
    }