c语言char转cstring,如何将CString类型的变量赋给char*类型的变量

2023-05-16

1、GetBuffer函数

使用CString::GetBuffer函数。

char *p; CString str="hello"; p=str.GetBuffer(str.GetLength()); str.ReleaseBuffer();

将CString转换成char * 时

CString str("aaaaaaa");

strcpy(str.GetBuffer(10),"aa");

str.ReleaseBuffer();

当我们需要字符数组时调用GetBuffer(int

n),其中n为我们需要的字符数组的长度.使用完成后一定要马上调用ReleaseBuffer();

还有很重要的一点就是,在能使用const char *的地方,就不要使用char *

2、memcpy

CString mCS=_T("cxl"); char mch[20]; memcpy(mch,mCS,20);

3、用LPCTSTR强制转换: 尽量不使用

char *ch; CString str; ch=(LPSTR)(LPCTSTR)str;

CString str = "good";

char *tmp;

sprintf(tmp,"%s",(LPTSTR)(LPCTSTR)str);

4、

CString Msg; Msg=Msg+"abc"; LPTSTR lpsz; lpsz = new

TCHAR[Msg.GetLength()+1]; _tcscpy(lpsz, Msg); char * psz; strcpy(psz,lpsz);

CString类向const char *转换

char a[100];

CString str("aaaaaa");

strncpy(a,(LPCTSTR)str,sizeof(a));

或者如下:

strncpy(a,str,sizeof(a));

以上两种用法都是正确地. 因为strncpy的第二个参数类型为const char

*.所以编译器会自动将CString类转换成const char *.

CString转LPCTSTR (const char *)

CString cStr;

const char *lpctStr=(LPCTSTR)cStr;

LPCTSTR转CString

LPCTSTR lpctStr;

CString cStr=lpctStr;

将char*类型的变量赋给CString型的变量

可以直接赋值,如: CString myString = "This is a

test"; 也可以利用构造函数,如: CString s1("Tom");

将CString类型的变量赋给char []类型(字符串)的变量

1、sprintf()函数

CString str = "good";

char tmp[200] ;

sprintf(tmp, "%s",(LPCSTR)str); (LPCSTR)str这种强制转换相当于(LPTSTR)(LPCTSTR)str CString类的变量需要转换为(char*)的时,使用(LPTSTR)(LPCTSTR)str

然而,LPCTSTR是const char

*,也就是说,得到的字符串是不可写的!将其强制转换成LPTSTR去掉const,是极为危险的!

一不留神就会完蛋!要得到char

*,应该用GetBuffer()或GetBufferSetLength(),用完后再调用ReleaseBuffer()。

2、strcpy()函数

CString str;

char c[256];

strcpy(c, str);

char mychar[1024];

CString source="Hello";

strcpy((char*)&mychar,(LPCTSTR)source);

关于CString的使用

1、指定 CString 形参

对于大多数需要字符串参数的函数,最好将函数原型中的形参指定为一个指向字符

(LPCTSTR) 而非 CString 的 const 指针。

当将形参指定为指向字符的 const 指针时,可将指针传递到 TCHAR 数组(如字符串 ["hi there"])或传递到

CString 对象。

CString 对象将自动转换成 LPCTSTR。任何能够使用 LPCTSTR 的地方也能够使用 CString

对象。

2、如果某个形参将不会被修改,则也将该参数指定为常数字符串引用(即 const

CString&)。如果函数要修改该字符串,

则删除 const 修饰符。如果需要默认为空值,则将其初始化为空字符串 [""],如下所示:

void AddCustomer( const CString& name, const CString&

address, const CString& comment = "" );

3、对于大多数函数结果,按值返回 CString 对象即可。

串的基本运算

对于串的基本运算,很多高级语言均提供了相应的运算符或标准的库函数来实现。

为叙述方便,先定义几个相关的变量:

char

s1[20]="dir/bin/appl",s2[20]="file.asm",s3[30],*p;

int

result;

下面以C语言中串运算介绍串的基本运算 1、求串长

int

strlen(char

*s); //求串s的长度

【例】printf("%d",strlen(s1)); //输出s1的串长12

2、串复制

char

*strcpy(char *to,*from);//将from串复制到to串中,并返回to开始处指针

【例】strcpy(s3,s1);

//s3="dir/bin/appl",s1串不变

3、联接

char

*strcat(char *to,char *from);//将from串复制到to串的末尾,

//并返回to串开始处的指针

【例】strcat(s3,"/"); //s3="dir/bin/appl/"

strcat(s3,s2); //s3="dir/bin/appl/file.asm"

4、串比较

int

strcmp(char *s1,char *s2);//比较s1和s2的大小,

//当s1s2和s1=s2时,分别返回小于0、大于0和等于0的值 【例】result=strcmp("baker","Baker"); //result>0

result=strcmp("12","12"); //result=0

result=strcmp("Joe","joseph") //result<0

5、字符定位

char

*strchr(char *s,char c);//找c在字符串s中第一次出现的位置,

//若找到,则返回该位置,否则返回NULL

【例】p=strchr(s2,'.'); //p指向"file"之后的位置

if(p)

strcpy(p,".cpp"); //s2="file.cpp"

注意:

①上述操作是最基本的,其中后

4个操作还有变种形式:strncpy,strncath和strnchr。

②其它的串操作见C的。在不同的高级语言中,对串运算的种类及符号都不尽相同

③其余的串操作一般可由这些基本操作组合而成

【例】求子串的操作可如下实现:

void

substr(char *sub,char *s,int pos,int len){

//s和sub是字符数组,用sub返回串s的第pos个字符起长度为len的子串

//其中0<=pos<=strlen(s)-1,且数组sub至少可容纳len+1个字符。

if

(pos<0||pos>strlen(s)-1||len<0)

Error("parameter

error!");

strncpy(sub,&s[pos],len); //从s[pos]起复制至多len个字符到sub

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c语言char转cstring,如何将CString类型的变量赋给char*类型的变量 的相关文章

随机推荐