CString 头文件#include <afx.h>
string 头文件#include <string.h>
CString 与 char *
CString 转 char *
CString cstr;
char *p = (LPSTR)(LPCTSTR)cstr;
char * 转 CString
1、CString.format(”%s”, char*);
2、CString strtest = char *;
char * 与 string
char * 转 string
string s(char *);
只能初始化,在不是初始化的地方最好还是用assign()
string 转 char *
char *p = string.c_str();
string 与 CString
string 转 CString
CString.format(”%s”, string.c_str());
CString 转 string
string s(CString.GetBuffer());
GetBuffer()后一定要ReleaseBuffer(),否则就没有释放缓冲区所占的空间.
《C++标准函数库》中说的
有三个函数可以将字符串的内容转换为字符数组和CString
1.c_str(),生成一个const char*指针,指向以空字符终止的数组,返回有”/0“的字符串数组。
2.data(),返回没有”/0“的字符串数组
3.copy()
(1)c_str()解释
const
char
* c;
string s=
"1234"
;
c = s.c_str();
cout<<c<<endl;
//输出:1234
s=
"abcd"
;
cout<<c<<endl;
//输出:abcd
|
上面如果继续用c指针的话,导致的错误将是不可想象的。就如:1234变为abcd
其实上面的c = s.c_str(); 不是一个好习惯。既然c指针指向的内容容易失效,我们就应该按照上面的方法,那怎么把数据复制出来呢?这就要用到strcpy等函数(推荐)。
//const char* c; //①
//char* c; //②
//char c[20];
char
* c=
new
char
[20];
string s=
"1234"
;
//c = s.c_str();
strcpy
(c,s.c_str());
cout<<c<<endl;
//输出:1234
s=
"abcd"
;
cout<<c<<endl;
//输出:1234
|
注意:不能再像上面一样①所示了,const还怎么向里面写入值啊;也不能②所示,使用了未初始化的局部变量“c”,运行会出错的 。
c_str()返回一个客户程序可读不可改的指向字符数组的指针,不需要手动释放或删除这个指针。
(2)data()解释
data():与c_str()类似,但是返回的数组不以空字符终止。
(3)copy()解释
copy(p,n,size_type _Off = 0):从string类型对象中至多复制n个字符到字符指针p指向的空间中。默认从首字符开始,但是也可以指定,开始的位置(记住从0开始)。返回真正从对象中复制的字符。------用户要确保p指向的空间足够保存n个字符。
CString 与 int
将字符转换为整数,可以使用atoi、_atoi64或atol。
而将数字转换为CString变量,可以使用CString的Format函数。如
CString s;
int i = 64;
s.Format(”%d”, i)
int 与 char *