C++中string、char *、char[]、const char*的轉換
簡述:
1) char*轉string:可以直接賦值。
2) char[]轉string:可以直接賦值。
3) char*轉char[]:不能直接賦值,可以迴圈char*字串逐個字元賦值,也可以使用strcpy_s等函式。
4) string轉char[]:不能直接賦值,可以迴圈char*字串逐個字元賦值,也可以使用strcpy_s等函式
5) string轉char*:呼叫string物件的c_str函式或data函式或copy函式。
6) char[]轉char*:直接賦值即可。使用時,要對源格式和目標格式進行初始化。源格式賦值為具體的內容,目標格式賦值為空。
總結如下:
A. 變成string,直接賦值。
B. char[]變成別的,直接賦值。
C. char*變const char*容易,const char*變char*麻煩。<const_cast><char*>(const char*);
D. string變char*要通過const char*中轉。
E. 變成char[]。string逐個賦值,char* const char* strncpy_s()
1、string轉char*
把string轉換為char* 有3種方法:data(); c_str(); copy();
其中,data()除了返回字串內容外,不附加結束符'\0',而c_str()返回一個以‘\0’結尾的字元陣列。
1) 呼叫string的data()函式
string str = "hello"; const char* p = str.data();//加const或者用char *p=(char*)str.data();
同時有一點需要說明,這裡在devc++中編譯需要新增const,否則會報錯invalid conversion from const char* to char *,這裡可以再前面加上const或者在等號後面給強制轉化成char*的型別。
2) 呼叫string的c_str()函式
string str=“world”; const char *p = str.c_str();//同上,要加const或者等號右邊用char*
//一定要使用strcpy()函式等來操作方法c_str()返回的指標 //比如:最好不要這樣: char* c; string s="1234"; c = s.c_str(); //c最後指向的內容是垃圾,因為s物件被析構,其內容被處理 //[Error] invalid conversion from 'const char*' to 'char*' [-fpermissive] //應該這樣用: char c[20]; string s="1234"; strcpy(c,s.c_str()); //這樣才不會出錯,c_str()返回的是一個臨時指標,不能對其進行操作 //再舉個例子 //c_str() 以 char* 形式傳回 string 內含字串 //如果一個函式要求char*引數,可以使用c_str()方法: string s = "Hello World!"; printf("%s", s.c_str()); //輸出 "Hello World!"
3) 呼叫string的copy()函式
string str="hmmm"; char p[50]; str.copy(p, 5, 0);//這裡5代表複製幾個字元,0代表複製的位置, *(p+5)=‘\0’;//注意手動加結束符!!!
2、char*轉string
可以直接賦值
string s; char *p = "hello"; s = p;
3、string轉char[]
不可以直接賦值,可以迴圈char*字串逐個字元賦值,也可以使用strcpy_s等函式
4、char[] 轉string
可以直接賦值
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;
5、char[]轉char*
可以直接賦值
6、char*轉char[]
不能直接賦值,可以迴圈char*字串逐個字元賦值,也可以使用strcpy_s等函式。
7、程式碼實現
1)string轉為其他型別
① string轉const char*② string轉char*#include "stdafx.h" #include <iostream> int _tmain(intargc, _TCHAR* argv[]) { std::string str = "HelloWorld!"; //初始化string型別,並具體賦值 const char* constc = nullptr;//初始化const char*型別,並賦值為空 constc= str.c_str(); //string型別轉const char*型別 printf_s("%s\n", str.c_str()); //列印string型別資料 .c_str() printf_s("%s\n", constc); //列印const char*型別資料 return 0; }
#include "stdafx.h" #include <iostream> int _tmain(intargc, _TCHAR* argv[]) { std::string str = "HelloWorld!"; //初始化string型別,並具體賦值 char* c = nullptr; //初始化char*型別,並賦值為空 const char* constc = nullptr;//初始化const char*型別,並賦值為空 constc= str.c_str(); //string型別轉const char*型別 c= const_cast<char*>(constc); //const char*型別轉char*型別 printf_s("%s\n", str.c_str()); //列印string型別資料 .c_str() printf_s("%s\n",c); //列印char*型別資料 return 0; }
③ string轉char[]
#include "stdafx.h" #include <iostream> int _tmain(intargc, _TCHAR* argv[]) { std::string str = "HelloWorld!"; //初始化string型別,並具體賦值 char arrc[20] = {0}; //初始化char[]型別,並賦值為空 for (int i=0; i<str.length();i++) //string型別轉char[]型別 { arrc[i]=str[i]; } printf_s("%s\n", str.c_str()); //列印string型別資料 .c_str() printf_s("%s\n", arrc); //列印char[]型別資料 return 0; }
2)const char*轉為其他型別
① const char*轉string#include "stdafx.h" #include <iostream> int _tmain(intargc, _TCHAR* argv[]) { const char* constc = "Hello World!"; //初始化const char* 型別 std::string str; //初始化string型別 str= constc; //const char*型別轉string型別 printf_s("%s\n", constc); //列印const char* 型別資料 printf_s("%s\n", str.c_str()); //列印string型別資料 return 0; }
② const char*轉char*
#include "stdafx.h" #include <iostream> int _tmain(intargc, _TCHAR* argv[]) { const char* constc = "Hello World!"; //初始化const char* 型別 char* c = nullptr; //初始化char*型別 c= const_cast<char*>(constc); //const char*型別轉char*型別 printf_s("%s\n", constc); //列印const char* 型別資料 printf_s("%s\n", c); //列印char*型別資料 return 0; }
③ const char*轉char[]
#include "stdafx.h" #include <iostream> int _tmain(intargc, _TCHAR* argv[]) { const char* constc = "Hello World!"; //初始化const char* 型別 char arrc[20] = { 0 }; //初始化char[]型別,並賦值為空 strncpy_s(arrc,constc,20); //const char*型別轉char[]型別 printf_s("%s\n", constc); //列印const char* 型別資料 printf_s("%s\n", arrc); //列印char[]型別資料 return 0; }
3)char*轉為其他型別
① char*轉stringint _tmain(intargc, _TCHAR* argv[]) { char* c = "HelloWorld!"; //初始化char* 型別,並具體賦值 std::string str; //初始化string型別 str= c; //char*型別轉string型別 printf_s("%s\n", c); //列印char* 型別資料 printf_s("%s\n", str.c_str()); //列印string型別資料 return 0; }
② char*轉const char*
#include "stdafx.h" #include <iostream> int _tmain(intargc, _TCHAR* argv[]) { char* c = "HelloWorld!"; //初始化char* 型別,並具體賦值 const char* constc = nullptr; //初始化const char* 型別 constc= c; //char*型別轉const char* 型別 printf_s("%s\n", c); //列印char* 型別資料 printf_s("%s\n", constc); //列印const char* 型別資料 return 0; }
③ char*轉char[]
#include "stdafx.h" #include <iostream> int _tmain(intargc, _TCHAR* argv[]) { char* c = "HelloWorld!"; //初始化char* 型別,並具體賦值 char arrc[20] = { 0 }; //初始化char[] 型別,並具體賦值 strncpy_s(arrc,c,20); //char*型別轉char[] 型別 printf_s("%s\n", c); //列印char* 型別資料 printf_s("%s\n", arrc); //列印char[]型別資料 return 0; }
4)char[]轉為其他型別#include "stdafx.h" #include <iostream> int _tmain(intargc, _TCHAR* argv[]) { char arrc[20] = "HelloWorld!"; //初始化char[] 型別,並具體賦值 std::string str; //初始化string const char* constc = nullptr; //初始化const char* char*c = nullptr; //初始化char* str= arrc; //char[]型別轉string型別 constc= arrc; //char[]型別轉const char* 型別 c= arrc; //char[]型別轉char*型別 printf_s("%s\n", arrc); //列印char[]型別資料 printf_s("%s\n", str.c_str()); //列印string型別資料 printf_s("%s\n", constc); //列印const char* 型別資料 printf_s("%s\n", c); //列印char*型別資料 return 0; }
相關文章
- const char*, char const*, char*const 有何區別?
- string與char陣列相互轉換陣列
- c++中字串之string和charC++字串
- C++ unsigned char*轉化為string的形式C++
- delphi:string,PChar,Array of Char 之間的轉換
- const char*的全特化
- char轉換成int
- C++中string轉換為char*型別返回後亂碼問題C++型別
- VS C++ 2017中const char* 型別的值不能用於初始化char*的解決C++型別
- char[] 轉換string時的自動截斷問題
- string.length() & strlen(char *)
- 【C++】CONST CHAR*型別的值不能用於初始化CHAR*型別的實體C++型別
- number----char(to_char)
- Rust中 String、str、&str、char 的區別Rust
- const char* 型別不能用於初始化char* 型別實體型別
- char
- 【VS2019 C++】"const char *" 型別的值不能用於初始化 "char *" 型別的實體C++型別
- c++各種字串互轉(char*、wchar_t*、CString、string、wstring、LPCWSTR)C++字串
- C#中的char和string的使用簡介C#
- char *的使用
- 關於VS2017中const char *不能用於初始化char *型別的實體的問題型別
- 當char型變數遇上char*型的指標變數指標
- C++(std::cout 處理 char*)C++
- E0144 "const char *" 型別的值不能用於初始化 "char *" 型別的實體型別
- Java原始碼閱讀-String中的private final char value[];Java原始碼
- VS2019【C++報錯】E0144"const char *" 型別的值不能用於初始化 "char *" 型別的實體C++型別
- CString與LPCWSTR、LPSTR、char*、LPWSTR等型別的轉換型別
- 【筆記】VS2017中出現 "const char *" 型別的值不能用於初始化 "char *" 型別的實體筆記型別
- 深入char、varchar、text
- C++中出現《E0144 "const char *" 型別的值不能用於初始化 "char *" 型別的實體》的錯誤解決方法C++型別
- MySQL中CHAR和VARCHAR區別MySql
- varchar和char的區別
- [Javascript] Zero-width charJavaScript
- MySQL中int、char、varchar的效能淺談MySql
- Python工作筆記-往dll中傳入char*型別的引數並且如何接收char*的值Python筆記型別
- mysql char_length和lengthMySql
- js日期轉換工具類(仿oracle to_char,to_date等語法)JSOracle
- C++ 讀取二進位制檔案到char*C++