const char* to char*(當函數傳遞參數時)


來自 https://blog.csdn.net/rongrongyaofeiqi/article/details/52442169

     https://blog.csdn.net/hebbely/article/details/79577880

簡述:

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對象被析構,其內容被處理 //應該這樣用: 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等函數

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;

 

4、char[] 轉string

可以直接賦值

string s; char ch[] = "hello world"; s = ch;

5、char[]轉char*

可以直接賦值

 

6、char*轉char[]

不能直接賦值,可以循環char*字符串逐個字符賦值,也可以使用strcpy_s等函數。

 

7、代碼實現

1)string轉為其他類型
string轉const 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; }
string轉char*
#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*轉string

int _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; }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM