Cstring 和其他型別間的互轉

2021-04-14 00:16:10 字數 3702 閱讀 5491

如何將cstring型別的變數賦給char*型別的變數

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 物件即可。

串的基本運算

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

c string和其他型別互轉

c 數值型別與string的相互轉換 c string的萬能轉換,從long string 之間的轉換來看看 c 11 使用函式模板將基本資料型別 整型 字元型 實型 布林型 轉換成string。ostringstream物件用來進行格式化的輸出,常用於將各種型別轉換為string型別 ostrin...

C string報未引入和CString互轉

c 在使用string類的時候報錯 string undeclared identifier 解決方法 include 引入string.而不是,using namespace std 引入命明空間.如果要輸出內容就要用 include include using namespace std cst...

CString與其他型別的轉換

如何將cstring型別的變數賦給char 型別的變數 1 getbuffer函式 使用cstring getbuffer函式。char p cstring str hello p str.getbuffer str.getlength str.releasebuffer 將cstring轉換成ch...