char*和CString转换

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情
 CString 是一种很特殊的 C++ 对象,它里面包含了三个值:一个指向某个数据缓冲区的指针、一个是该缓冲中有效的字符记数(它是不可存取的,是位于 CString 地址之下的一个隐藏区域)以及一个缓冲区长度。 有效字符数的大小可以是从0到该缓冲最大长度值减1之间的任何数(因为字符串结尾有一个NULL字符)。字符记数和缓冲区长度被巧妙隐藏。

(1) char*转换成CString

  若将char*转换成CString,除了直接赋值外,还可使用CString::Format进行。例如:

         char chArray[] = "Char  test";
         TCHAR * p = _T("Char  test");( 或LPTSTR p = _T("Char  test");)
         CString theString = chArray;
         theString.Format(_T("%s"), chArray);
         theString = p;

(2) CString转换成char*

  若将CString类转换成char*(LPSTR)类型,常常使用下列三种方法:

  方法一,使用强制转换。例如:

       CString theString( (_T("Char test "));
        LPTSTR lpsz =(LPTSTR)(LPCTSTR)theString;

  方法二,使用strcpy。例如:

       CString theString( (_T("Char test "));
       LPTSTR lpsz = new TCHAR[theString.GetLength()+1];
        _tcscpy(lpsz, theString);

  需要说明的是,strcpy(或可移值的_tcscpy)的第二个参数是 const wchar_t* (Unicode)或const char* (ANSI),系统编译器将会自动对其进行转换。

  方法三,使用CString::GetBuffer。

        如果你需要修改 CString 中的内容,它有一个特殊的方法可以使用,那就是 GetBuffer,它的作用是返回一个可写的缓冲指针。 如果你只是打算修改字符或者截短字符串,例如:
       CString s(_T("Char test "));
        LPTSTR p = s.GetBuffer(); 

        LPTSTR dot = strchr(p, ''.'');

         // 在这里添加使用p的代码

          if(p != NULL) 

         *p = _T('');
         s.ReleaseBuffer();                     // 使用完后及时释放,以便能使用其它的CString成员函数

         在 GetBuffer 和 ReleaseBuffer 之间这个范围,一定不能使用你要操作的这个缓冲的 CString 对象的任何方法。因为 ReleaseBuffer 被调用之前,该 CString 对象的完整性得不到保障。

C++学习——CStringchar * ,string的相互转换 CString头文件#include <afx.h> string头文件#include <string.h> 1、CStringchar * CString cstr; char *p =(LPSTR)(LPCTSTR)cstr; 2、string CString CString.format(”%s”, string.c_str()); 用c_str()确实比dat... 阅读详情

相关推荐

MFC有效解决char数组CString乱码问题

// ANSI To UNCODE转换 CString CATP_SIMDoc::AnsiToUnicode(char * szAnsi, int len) { CString str; // ansi to unicode //预转换,得到所需空间的大小 int wcsLen; if (len>0) wcsLen = len; else wcsLen = ::MultiByt

7935

char *CString转换

string<->char *<->CString: (1)将多字节转换为宽字节声明一个宽字节L wchar_t *p2=L"aaa"; 统计宽字节的字符串长度int num=wcslen(p2) [统计多字节字符串的长度: char *p="aaa"; int num=strlen(p);] char*CString之间的转换 char*->CS...

Goldstine的博客 1万+

VC编程unicode字符集下char数组化为CString

struct sockaddr_in addr; int addr_len = sizeof(struct sockaddr_in); CString strState; //记得要用char接收数据,因为网络中传输的数据只是编码方式 无关的字节流 //所以接收到字节流后再化为宽字符unicode编码方式用于显示 写文件 char tempSocketRec

聚精会神搞建设 2779

数据类型转换(二)char*CString转换

在我要用到strcat()等时,经常会碰到一些内存的错误,但是此时vc并不提示类型不匹配,这就让人很费解,在我经过多次这种情况后,我才恍然明白原来是 char*CString的原因。那到底怎么转换呢?网上找了很久,终于搜集的比较全了:CString 是一种很特殊的 C++ 对象,它里面包含了三个值:一个指向某个数据缓冲区的指针、一个是该缓冲中有效的字符记数(它是不可存取的,是位于 CSt

redpetallsg的专栏 1770

CString,string,char*之间的转换

这三种类型各有各的优点,比如CString比较灵活,是基于MFC常用的类型,安全性也最高,但可移植性最差。string是使用STL时必不可少的类型,所以是做工程时必须熟练掌握的;char*是从学习C语言开始就已经我们形影不离的了,有许多API都是以char*作为参数输入的。所以熟练掌握三者之间的转换十分必要。 以下我用简单的图示指出三者之间的关系,并以标号对应转换的方法。 1 strin...

编程知识分享 2万+

charcstring_char*CString转换

CString 是一种很特殊的 C++ 对象,它里面包含了三个值:一个指向某个数据缓冲区的指针、一个是该缓冲中有效的字符记数(它是不可存取的,是位于 CString 地址之下的一个隐藏区域)以及一个缓冲区长度。 有效字符数的大小可以是从0到该缓冲最大长度值减1之间的任何数(因为字符串结尾有一个NULL字符)。字符记数缓冲区长度被巧妙隐藏。(1) char*转换CString若将char*转换成...

weixin_39619174的博客 1446

char*转换CStringCString转换char *、连接char*

1,char*转换CString      char * pFileName = sItemValue;            int charLen = strlen(pFileName);            int len = MultiByteToWideChar(CP_UTF8,0,pFileName,charLen,NULL,0);            TCHAR *buf =

huangzp1985的专栏 1273

BSTR、char*CString转换

(1) char*转换CString  若将char*转换CString,除了直接赋值外,还可使用CString::Format进行。例如:char chArray[] = "This is a test";char * p = "This is a test";   或LPSTR p = "This is a test";   或在已定义Unicode应的用程序中

困兽犹斗的专栏 5万+

CStringchar*转换

CString 是一种很特殊的 C++ 对象,它里面包含了三个值:一个指向某个数据缓冲区的指针、一个是该缓冲中有效的字符记数(它是不可存取的,是位于 CString 地址之下的一个隐藏区域)以及一个缓冲区长度。 有效字符数的大小可以是从0到该缓冲最大长度值减1之间的任何数(因为字符串结尾有一个NULL字符)。字符记数缓冲区长度被巧妙隐藏。 (1) char*转换CString   若将c

沧浪之水 424

char*CString转换

char* 化为 CString   现在你有一个 char* 类型的数据,或者说一个字符串。怎么样创建 CString 对象呢?这里有一些例子:   char * p = "This is a test";   或者象下面这样更具有 Unicode 意识:   TCHAR * p = _T("This is a test")   或   LPTS

tianxiajianling的专栏 613

CString char * 的相互转换

CString char * 的相互转换_T的作用_T_TEXT是一样的,一般情况_T("Kurt")“Kurt"没有什么区别。但对于UNICODE,一般加上_T.如果想编译UNICODE版本的软件,则加上_T可以由编译器自动把字符串转换为Unicode的。 char* str,或unsigned char* str转换CString1。直接用构造函数

beitcoder的专栏 1419

CString与const char*转换

LPCTSTR 与 GetBuffer(int nMinBufLength)  这两个函数提供了与标准C的兼容转换。在实际中使用频率很高,但却是最容易出错的地方。这两个函数实际上返回的都是指针,但它们有何区别呢?以及调用它们后,幕后是做了怎样的处理过程呢?  (1) LPCTSTR 它的执行过程其实很简单,只是返回引用内存块的串地址。 它是作为操作符重载提供的,  所以在代码中有

LJH0600301217的专栏 3万+

CStringchar *之间的转换

CStringchar *之间的转换 CStringchar *之间的转换 —————————————————————————— http://www.cppblog.com/greatws/archive/2008/08/31/60546.html ———————————————————————— 1、char * CString char

acm_lp的专栏 494

VS中关于CString char *之间的转换问题

1.  工程属性中字符集选择为 “未设置”或者“使用多字节字符集”时  CStringchar *之间的转换比较简单 (1)CString char*     char* buf ;     CString str;     buf = str.GetBuffer(str.GetLength());       (2) char *CString    str = (L

a351262598的博客 1372

WINCE下 CString Char *转换

最近项目中遇到关于CStringChar * 相互转换及存储问题,网上有很多描述方法,但是不太适合Wince下编程使用,究其根本原因有不外乎两点:一是wince自身的限制,二是由于WinCE的本地文件格式采用了Unicode编码。1. CString转换Char *CString Currentfilename = “hello.txt”;char str[128];int i;...

aotingyou8613的博客 182

Unicode下CStringchar *转换

Unicode下CStringchar *转换   在Visual C++.NET2005中,默认的字符集形式是Unicode,但在VC6.0等工程中,默认的字符集形式是多字节字符集(MBCS:Multi-Byte Character Set),这样导致在VC6.0中非常简

我不寂寞,因為有寂寞陪著我。 799

CStringchar* 类型互相转换

在进行MFC 开发的时候避免不了用到CStringchar* 类型互相转换,网络上提供许多方法,但是我觉得以下方式在转换的过程中比较安全,所以写出来方便大家参考,与人方便,与己方便。 1、CString char* char* CImagePro::CstringToChar(CString str) { /*char* buf=new char[10];*/ int len=...

IT新秀 2212

c++——CString,string,char*之间的转换

这三种各有优点。比如CString比较灵活,是基于MFC常用的类型,安全性也最高,但可移植性最差。 string是使用STL时必不可少的类型,所以是做工程时必须熟练掌握的; char*是从学习C语言开始就已经我们形影不离的了,有许多API都是以char*作为参数输入的。所以熟练掌握三者之间的转换十分必要。 以下我用简单的图示指出三者之间的关系,并以标号对应转换的方法。 1 s...

yimixgg的博客 3874
上一篇: CString/string/char *比较详解
下一篇: WinAPI【钩子相关函数】 HOOK例解
ShenRui
博客等级 码龄19年 63粉丝 36原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值