CString和char []之间的转换:
CString 和 const char 指针
CString 对象还能像 C 样式的字符串(PCXSTR,如果不是在 Unicode 下,PCXSTR 与 const char* 是相同的)一样工作。CSimpleStringT::operator PCXSTR 转换运算符使 CString 对象能够在函数调用中自由替换字符指针。CString( LPCWSTR pszSrc ) 构造函数使字符指针能够替换 CString 对象。
转换成 C 样式空终止字符串
请考虑以下两种情况: 在最简单的情况下,可以将 CString 对象转换成 LPCTSTR。LPCTSTR 类型转换运算符从 CString 对象返回指向只读的 C 样式空终止字符串的指针。 
由 LPCTSTR 返回的指针指入由 CString 使用的数据区域。如果 CString 离开了这个范围并且被自动删除,或其他原因更改了 CString 的内容,那么 LPCTSTR 指针将不再有效。请将该指针指向的字符串视为临时的。 可使用 CString 函数(如 SetAt)来修改字符串对象中的单个字符。但是,如果需要可直接修改的 CString 对象字符的副本,那么请使用 strcpy(或可移植 Unicode/MBCS 的 _tcscpy)来将 CString 对象复制到单独的缓冲区,在那里可安全地修改字符串,如以下示例中所示: 
CString theString( "This is a test" );
LPTSTR lpsz = new TCHAR[theString.GetLength()+1];
_tcscpy(lpsz, theString);
//... modify lpsz as much as you want
注意   strcpy(或可移值 Unicode/MBCS 的 _tcscpy)的第二个参数是 const wchar_t* (Unicode) 或 const char* (ANSI)。以上示例为该参数传递一个 CString。C++ 编译器自动将为应用转换函数,该转换函数是为将 CString 转换为 LPCTSTR 的 CString 类定义的。定义从一种类型到另一种类型的转换操作的能力是 C++ 最为有用的功能之一。这个我刚才在msdn上看到的资料,所写的转换代码如下:
         CString localName=GetHostName();//下面将CString转换为char数组类型,填入到srcHost[100]中
        LPTSTR lp_fiName=new TCHAR[localName.GetLength()+1];
LPTSTR lptem=lp_fiName;
int max=0;
    while(max<100)
{
   
     s_fileInfo.srcHost[max]=(char)(*lptem);
     max++;
     lptem++;
     if((*lptem)=='\0')  break;
}
我想问的是这样行不行,不行的话能不能指教一下,谢谢.

解决方案 »

  1.   

    CString localName=GetHostName();//下面将CString转换为char数组类型,填入到srcHost[100]中
            LPTSTR lp_fiName=new TCHAR[localName.GetLength()+1];
    LPTSTR lptem=lp_fiName;   
    int max=0;
        while(max<100)
    {
       
         s_fileInfo.srcHost[max]=(char)(*lptem);
         max++;
         lptem++;
         if((*lptem)=='\0')  break;
    }当然可以呀,两个LPTSTR 指向同一内存地址,只是你忘了将localName的内容复制到lp_fiName中了