把string轉換為char* 有3種方法:data(); c_str(); copy();. 其中,data()除了返回字串內容外,不附加結束符'\0',而c_str()返回一個以'\0'結尾的字元 ...
Togglenavigation
IT人
IT人
C++中string、char*、char[]、constchar*的轉換
Curtis_發表於
2019-03-18
C++
簡述:
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*變constchar*容易,constchar*變char*麻煩。
(constchar*);
D. string變char*要通過constchar*中轉。
E.變成char[]。
string逐個賦值,char*constchar*strncpy_s()
1、string轉char*
把string轉換為char*有3種方法:data();c_str();copy();
其中,data()除了返回字串內容外,不附加結束符'\0',而c_str()返回一個以‘\0’結尾的字元陣列。
1)呼叫string的data()函式
stringstr="hello";
constchar*p=str.data();//加const或者用char*p=(char*)str.data();
同時有一點需要說明,這裡在devc++中編譯需要新增const,否則會報錯invalidconversionfromconstchar* tochar*,這裡可以再前面加上const或者在等號後面給強制轉化成char*的型別。
2)呼叫string的c_str()函式
stringstr=“world”;
constchar*p=str.c_str();//同上,要加const或者等號右邊用char*
//一定要使用strcpy()函式等來操作方法c_str()返回的指標
//比如:最好不要這樣:
char*c;
strings="1234";
c=s.c_str();//c最後指向的內容是垃圾,因為s物件被析構,其內容被處理
//[Error]invalidconversionfrom'constchar*'to'char*'[-fpermissive]
//應該這樣用:
charc[20];
strings="1234";
strcpy(c,s.c_str());
//這樣才不會出錯,c_str()返回的是一個臨時指標,不能對其進行操作
//再舉個例子
//c_str()以char*形式傳回string內含字串
//如果一個函式要求char*引數,可以使用c_str()方法:
strings="HelloWorld!";
printf("%s",s.c_str());//輸出"HelloWorld!"
3)呼叫string的copy()函式
stringstr="hmmm";
charp[50];
str.copy(p,5,0);//這裡5代表複製幾個字元,0代表複製的位置,
*(p+5)=‘\0’;//注意手動加結束符!!!
2、char*轉string
可以直接賦值
strings;
char*p="hello";
s=p;
3、string轉char[]
不可以直接賦值,可以迴圈char*字串逐個字元賦值,也可以使用strcpy_s等函式
4、char[] 轉string
可以直接賦值
stringpp="dagah";
charp[8];
inti;
for(i=0;i
int_tmain(intargc,_TCHAR*argv[])
{
std::stringstr="HelloWorld!";//初始化string型別,並具體賦值
constchar*constc=nullptr;//初始化constchar*型別,並賦值為空
constc=str.c_str();//string型別轉constchar*型別
printf_s("%s\n",str.c_str());//列印string型別資料.c_str()
printf_s("%s\n",constc);//列印constchar*型別資料
return0;
}
② string轉char*
#include"stdafx.h"
#include
int_tmain(intargc,_TCHAR*argv[])
{
std::stringstr="HelloWorld!";//初始化string型別,並具體賦值
char*c=nullptr;//初始化char*型別,並賦值為空
constchar*constc=nullptr;//初始化constchar*型別,並賦值為空
constc=str.c_str();//string型別轉constchar*型別
c=const_cast(constc);//constchar*型別轉char*型別
printf_s("%s\n",str.c_str());//列印string型別資料.c_str()
printf_s("%s\n",c);//列印char*型別資料
return0;
}
③string轉char[]
#include"stdafx.h"
#include
int_tmain(intargc,_TCHAR*argv[])
{
std::stringstr="HelloWorld!";//初始化string型別,並具體賦值
chararrc[20]={0};//初始化char[]型別,並賦值為空
for(inti=0;i
int_tmain(intargc,_TCHAR*argv[])
{
constchar*constc="HelloWorld!";//初始化constchar*型別
std::stringstr;//初始化string型別
str=constc;//constchar*型別轉string型別
printf_s("%s\n",constc);//列印constchar*型別資料
printf_s("%s\n",str.c_str());//列印string型別資料
return0;
}
② constchar*轉char*
#include"stdafx.h"
#include
int_tmain(intargc,_TCHAR*argv[])
{
constchar*constc="HelloWorld!";//初始化constchar*型別
char*c=nullptr;//初始化char*型別
c=const_cast(constc);//constchar*型別轉char*型別
printf_s("%s\n",constc);//列印constchar*型別資料
printf_s("%s\n",c);//列印char*型別資料
return0;
}
③ constchar*轉char[]
#include"stdafx.h"
#include
int_tmain(intargc,_TCHAR*argv[])
{
constchar*constc="HelloWorld!";//初始化constchar*型別
chararrc[20]={0};//初始化char[]型別,並賦值為空
strncpy_s(arrc,constc,20);//constchar*型別轉char[]型別
printf_s("%s\n",constc);//列印constchar*型別資料
printf_s("%s\n",arrc);//列印char[]型別資料
return0;
}
3)char*轉為其他型別
① char*轉string
int_tmain(intargc,_TCHAR*argv[])
{
char*c="HelloWorld!";//初始化char*型別,並具體賦值
std::stringstr;//初始化string型別
str=c;//char*型別轉string型別
printf_s("%s\n",c);//列印char*型別資料
printf_s("%s\n",str.c_str());//列印string型別資料
return0;
}
② char*轉constchar*
#include"stdafx.h"
#include
int_tmain(intargc,_TCHAR*argv[])
{
char*c="HelloWorld!";//初始化char*型別,並具體賦值
constchar*constc=nullptr;//初始化constchar*型別
constc=c;//char*型別轉constchar*型別
printf_s("%s\n",c);//列印char*型別資料
printf_s("%s\n",constc);//列印constchar*型別資料
return0;
}
③ char*轉char[]
#include"stdafx.h"
#include
int_tmain(intargc,_TCHAR*argv[])
{
char*c="HelloWorld!";//初始化char*型別,並具體賦值
chararrc[20]={0};//初始化char[]型別,並具體賦值
strncpy_s(arrc,c,20);//char*型別轉char[]型別
printf_s("%s\n",c);//列印char*型別資料
printf_s("%s\n",arrc);//列印char[]型別資料
return0;
}
4)char[]轉為其他型別
#include"stdafx.h"
#include
int_tmain(intargc,_TCHAR*argv[])
{
chararrc[20]="HelloWorld!";//初始化char[]型別,並具體賦值
std::stringstr;//初始化string
constchar*constc=nullptr;//初始化constchar*
char*c=nullptr;//初始化char*
str=arrc;//char[]型別轉string型別
constc=arrc;//char[]型別轉constchar*型別
c=arrc;//char[]型別轉char*型別
printf_s("%s\n",arrc);//列印char[]型別資料
printf_s("%s\n",str.c_str());//列印string型別資料
printf_s("%s\n",constc);//列印constchar*型別資料
printf_s("%s\n",c);//列印char*型別資料
return0;
}
參考:string、constchar*、char*、char[]相互轉換
來源:https://blog.csdn.net/hebbely/article/details/79577880
相關文章
《演算法筆記》2.4小節——C/C++快速入門->迴圈結構例題5-1-1連續自然數求和
2020-11-20
演算法C++
Charlesmock資料詳解
2020-11-20
【面試攻略】C++面試-銀漢
2020-11-21
面試C++
c++11-17模板核心知識(五)——理解模板引數推導規則
2020-11-21
C++
2020.11.20setInterval函式的注意事項ES6-8學習(letconst解構賦值)
2020-11-21
JavaScriptES6
初學計算機語言者(C語言,C++,java,pytion,C#)
2020-11-21
JavaC++C#
【面試攻略】C++面試-4399
2020-11-21
面試C++
兩圓相交求面積c++
2020-11-21
C++
C++中使用巨集定義來註釋掉所有的cout輸出
2020-11-21
C++
【c++】結構體sort排序
2020-11-21
C++
C++知識點49——類繼承與類的構造、拷貝、operator=和解構函式
2020-11-21
C++
qt--QString類及常用函式功能的使用
2020-11-21
QT
淺析氣泡排序-c++
2020-11-21
C++
Oracle中varchar2和nvarchar2區別
2020-11-22
Oracle
C++純虛數的使用
2020-11-22
C++
echarts入門(通過axios請求資料)
2020-11-22
iOS
vuex報錯vuex__WEBPACK_IMPORTED_MODULE_1__.default.storeisnotaconstructor
2020-11-22
WebpackVue
【PAT甲級A1084】BrokenKeyboard(20分)(c++)
2020-11-22
C++
C++L1-7谷歌的招聘
2020-11-22
C++
一文讓你學完C++,乾貨收藏!!!
2020-11-22
C++
最新文章
資源變現資訊、自媒體、新聞、部落格小程式開源
WPF開發隨筆收錄-心電圖曲線繪製
React自定義hook之:useClickOutside——判斷是否點選DOM之外區域
微軟更新MicrosoftStore策略:重點“打擊”欺詐付費版的非官方開源程式
給大家安利一款我開發的VSCode多語言外掛
電腦必須開啟的設定
一篇文章講清楚MySQL的聚簇/聯合/覆蓋索引、回表、索引下推
React技巧之檢查元素是否可見
揭祕GaussDB(forRedis):全面對比Codis
資料庫系列:MySQL索引優化總結(綜合版)
模擬與燒錄程式有哪幾種方式?(包含常用工具與使用方式)
Kubernetes跨StorageClass遷移PersistentVolumes完全指南