淺析string 與char* char[]之間的轉換。本站提示廣大學習愛好者:(淺析string 與char* char[]之間的轉換)文章只能為提供參考,不一定能成為您想要的結果。以下是淺析string 與char* char[]之間的轉換正文
1、起首必需懂得,string可以被算作是以字符為元素的一種容器。字符組成序列(字符串)。有時刻在字符序列中停止遍歷,尺度的string類供給了STL容器接口。具有一些成員函數好比begin()、end(),迭代器可以依據他們停止定位。
留意,與char*分歧的是,string紛歧定以NULL('\0')停止。string長度可以依據length()獲得,string可以依據下標拜訪。所以,不克不及將string直接賦值給char*。
2、string 轉換成 char *
假如要將string直接轉換成const char *類型。string有2個函數可以應用。
一個是.c_str(),一個是data成員函數。
例子以下:
string s1 = "abcdeg";
const char *k = s1.c_str();
const char *t = s1.data();
printf("%s%s",k,t);
cout<<k<<t<<endl;
如上,都可以輸入。內容是一樣的。然則只能轉換成const char*,假如去失落const編譯不克不及經由過程。
那末,假如要轉換成char*,可以用string的一個成員函數copy完成。
string s1 = "abcdefg";
char *data;
int len = s1.length();
data = (char *)malloc((len+1)*sizeof(char));
s1.copy(data,len,0);
printf("%s",data);
cout<<data;
3、char *轉換成string
可以直接賦值。
string s;
char *p = "adghrtyh";
s = p;
不外這個是會湧現成績的。
有一種情形我要解釋一下。當我們界說了一個string類型以後,用printf("%s",s1);輸入是會出成績的。這是由於“%s”請求前面的對象的首地址。然則string不是如許的一個類型。所以確定失足。
用cout輸入是沒有成績的,若必定要printf輸入。那末可以如許:
printf("%s",s1.c_str())
4、char[] 轉換成string
這個也能夠直接賦值。然則也會湧現下面的成績。須要異樣的處置。
5、string轉換成char[]
這個因為我們曉得string的長度,可以依據length()函數獲得,又可以依據下標直接拜訪,所以用一個輪回便可以賦值了。
如許的轉換弗成直接賦值。
string pp = "dagah";
char p[8];
int i;
for( i=0;i<pp.length();i++)
p[i] = pp[i];
p[i] = '\0';
printf("%s\n",p);
cout<<p;