cstring char,CString怎么转换成char
cstring char,CString怎么转换成char详细介绍
本文目录一览: CString与string,char的区别和转换
我们在C++的开发中经常会碰到string、char*以及CString,这三种都表示字符串类型,有很多相似又不同的地方,常常让人混淆。下面详细介绍这三者的区别、联系和转换: 各自的区别 char*: char*是一个指向字符的指针,是一个内置类型。可以指向一个字符,也可以表示字符数组的首地址(首字符的地址)。我们更多的时候是用的它的第二的功能,来表示一个字符串,功能与字符串数组char ch[n]一样,表示字符串时,最后有一个 '\0'结束符作为字符串的结束标志。 string: string是C++标准库(STL)中的类型,它是定义的一个类,定义在
头文件中。里面包含了对字符串的各种常用操作,它较char*的优势是内容可以动态拓展,以及对字符串操作的方便快捷,用+号进行字符串的连接是最常用的操作。 CString CString常用于MFC编程中,是属于MFC的类,如从对话框中利用GetWindowText得到的字符串就是CString类型,CString定义在
头文件中。CString(typedef CStringT> CString)为Visual C++中最常用的字符串类,继承自CSimpleStringT类,主要应用在MFC和ATL编程中,所以使用CString时要包含afx.h文件#include
。
char可不可以和CString这么比较
char, 普通的8bit 字符型变量。TCHAR,宏定义变量类型。它可能是8bit 字符型变量,也可能是16 bit 字符型变量。到底是8bit还是16bit, 取决于 是否定义了 宏变量 UNICODE。 CString 不同于 char,TCHAR,它不是 变量类型,它是 class(中文叫“类”,带有许多成员函数),尽管它的对象里可以存放 字符串。CString对象里的字符串 是 TCHAR 型的,到底是 8bit,16 bit 不一定,取决于 是否定义了 宏变量 UNICODE 或 多字节。
如何将CString转换为char类型
将CString转换为char*类型
1.传给未分配内存的const
char*
(LPCTSTR)指针.
CString
cstr(asdd);
const
char*
ch
=
(LPCTSTR)cstr;
ch指向的地址和cstr相同。但由于使用const保证ch不会修改,所以安全.
2.传给未分配内存的指针.
CString
cstr
=
"ASDDSD";
char
*ch
=
cstr.GetBuffer(cstr1.GetLength()
+
1);
cstr.ReleaseBuffer();
//修改ch指向的值等于修改cstr里面的值.
//PS:用完ch后,不用delete
ch,因为这样会破坏cstr内部空间,容易造成程序崩溃.
3.第二种用法。把CString
值赋给已分配内存的char
*。
CString
cstr1
=
"ASDDSD";
int
strLength
=
cstr1.GetLength()
+
1;
char
*pValue
=
new
char[strLength];
strncpy(pValue,
cstr1,
strLength);
4.第三种用法.把CString
值赋给已分配内存char[]数组.
CString
cstr2
=
"ASDDSD";
int
strLength1
=
cstr1.GetLength()
+
1;
char
chArray[100];
memset(chArray,0,
sizeof(bool)
*
100);
//将数组的垃圾内容清空.
1.传给未分配内存的const
char*
(LPCTSTR)指针.
CString
cstr(asdd);
const
char*
ch
=
(LPCTSTR)cstr;
ch指向的地址和cstr相同。但由于使用const保证ch不会修改,所以安全.
2.传给未分配内存的指针.
CString
cstr
=
"ASDDSD";
char
*ch
=
cstr.GetBuffer(cstr1.GetLength()
+
1);
cstr.ReleaseBuffer();
//修改ch指向的值等于修改cstr里面的值.
//PS:用完ch后,不用delete
ch,因为这样会破坏cstr内部空间,容易造成程序崩溃.
3.第二种用法。把CString
值赋给已分配内存的char
*。
CString
cstr1
=
"ASDDSD";
int
strLength
=
cstr1.GetLength()
+
1;
char
*pValue
=
new
char[strLength];
strncpy(pValue,
cstr1,
strLength);
4.第三种用法.把CString
值赋给已分配内存char[]数组.
CString
cstr2
=
"ASDDSD";
int
strLength1
=
cstr1.GetLength()
+
1;
char
chArray[100];
memset(chArray,0,
sizeof(bool)
*
100);
//将数组的垃圾内容清空.
cstring和char能相加吗?
例如:CString str
如需添加字符"D",可以使用CString类型的一个方法;
str.format("%s%c","ABC",'D');
可以
CString 的 += 操作符提供了多种重载,既可以追加一个字符串 (LPCTSTR, CString),也可以追加一个字符 (TCHAR)。如果你的项目默认字符集是“多字节字符集”,那么 TCHAR 就是 char,LPCTSTR 就是 const char*。
规范的做法是调用 Append 函数。Format 函数太复杂、太慢了。
怎么比较char 和CString这两个字符串的大小
//获得CString长度
CString s;
s.GetLength();
//获得char *长度
strlen(const char *);
不过我提醒下:CSting是一个MFC类,在VC++中调用常出错
在编译前做如下改变:工程-》设置-》C/C++里的工程选项 末尾加上/MT 点确定即可
将char * 转成CString,然后比较即可。
CString 用 GetLength();
char * 用 strlen(const char *);
注意自己工程环境是否是MFC工程
//获得CString长度
CString s;
s.GetLength();
//获得char *长度
strlen(const char *);
//获得CString长度
CString s;
s.GetLength();
//获得char *长度
strlen(const char *);
如果工程为多字节工程(非unicode),那么CString类型变量所保存的字串就可以按照char*类型来处理.
char* 类型和CString类型的字符串比较,在多字节状态下,可以用strcmp和memcmp函数进行比较.
为了统一类型,可以先将char*类型字符串复制给一个CString类型字符串,再做比较.
或者将CString类型的字符串复制给一个char*类型的变量,再与原char*类型字符串比较.
char[] 转换成cstring
1、首先调用string的data函数转换代码 。
2、接着使用string的c_str函数转换代码。
3、然后调用string的copy函数转换代码 。
4、接着copy出string的一个成员函数。
5、然后使用char *p=“adg”转换成string方法代码。
6、最后实现char[] 转换成cstring。
这个CString是MFC库里面的类么?
如果是的话,有如下3种方法
方法1:
char a[] = "This is a test";
CString str = a;
方法2:
CString str(a);
方法3:
CString str;
str.Format(_T("%s"), a);
char str[] = "hello";
CString c = str;
1、调用string的data函数转换代码。
2、使用string的c_str函数转换代码。
3、去调用string的copy函数转换代码 。
4、string 转换成 char *方法代码。
5、使用char *转换成string方法代码。
6、推荐使用的转换方法。
怎样将CString放入char数组
首先要将CString类型的变量转化为字符串类型
如CString
s("hello");
LPCTSTR
p=s;//这样强制转换为char*类型,然后就可以放在数组里了。
CString怎么转换成char
CString strData ...;
char* tmp = new char[DATA_MAX];
sprintf(tmp,"%S", strData);
//必须大S。用小s的话,因为CString在UNICODE下占两个字节,对于英文字符只需一个字节,故其第一(或第二,取决于字节序)个字节会是0x00,转换为占一个字节的char就会被识别为字符串结束,故只能得到第一个字符。
CString s = "abcd";
char *p = (LPSTR)(LPCTSTR)s;
CString strtest;
char * charpoint;
charpoint=”give string a value”;
strtest=charpoint;
///cstring TO char *
charpoint=strtest.GetBuffer(strtest.GetLength());
强制类型转换
CString s="abc";
char *d =(char*)s;
CString a;
char* b=(char*)a;
那种强制转换不好用,很多时候都不能用。下面看我这个转换吧。虽然代码多一点,但是好用。有问题继续联系我。
CString str = _T("asdfg");
string st = (string)(CStringA)str;
int len = st.length();
char* ch = (char*)malloc(len); //动态申请char*大小的空间
for(int i = 0 ; i
<len ; i++)
{
ch[i] = st[i];
}
ch[len] = '\0'; //char是以'\0'结束的,否则会出现结尾乱码
怎么将CString 赋值给 char
char arry[]={'C','S','t','r','i','n','g'};
char* 给CString 赋值,在非Unicode下,最简单的做法实例:
char a[128] = "Hello World!";
CString str;
str.Format("%s", a);
MFC中Cstring转char的问题,只能得到第一个字符是为啥呢
最简单的就是把项目改成多字节字符集,cstring就等于const
char*,如果需要char*就getbuffer,用完再releasebuffer或是复制一份.
char *buf = (LPSTR)(LPCTSTR)m_SendMSG;
buf 没有分配空间
改成:
char buf[100];
strcpy(buf, m_SendMSG);
将工程字符集改成“使用多字节字符集”
应该写成char *buf = m_SendMSG.GetBuffer(0);
这样试试:
UpdateData(true);
char *buf = m_SendMSG.GetBuffer(0);
UpdateData(true);
char* buf = m_SendMSG.GetBuffer(0);
在MFC中,最好不要用char和CString转换。不仅麻烦,还容易出错。
就用单一的CString就好,获得字符串内容用GetBuffer。
如果跨平台试试std::string。