【資料型別】string與char[]的轉換方法
阿新 • • 發佈:2018-12-03
在 【資料結構】棧與佇列Part2:棧的應用之表示式轉換 中,儲存表示式的資料型別是string型別,而atof()函式是將char[]型別轉化為浮點數的函式。
因此,將string轉化為char[]的方法是非常重要的。
查閱資料:c++ string轉char*
我主要採用這篇文章提到strcpy()函式進行操作,下面給出示範程式碼:
1 #include<iostream> 2 #include<stdio.h> 3 #include<stdlib.h> 4 #include<algorithm> 5#include<map> 6 #include<stack> 7 #include<queue> 8 9 using namespace std; 10 11 int main(){ 12 string str="12.3"; 13 char p[20]; 14 strcpy(p,str.c_str()); 15 double q; 16 q=atof(p); 17 cout<<q; 18 return 0; 19 }
下面再總結一下這篇文章有意思(看得懂)的部分:(我實在是菜的過分)
1.c_str()返回的是一個臨時指標,不能對其進行操作。
我的理解是,這個函式只能用來給出一個臨時的char*指標,將string轉化為char*,適用於下面這種情況:
string str="12.4"; cout<<strlen(str.c_str())<<endl;
這裡不需要長期的保持這個指標,因此建立了一個臨時指標,指向string str。
因此在使用的時候,下面這種方法是錯誤的:
char* c; string s="1234"; c = s.c_str();
這種寫法,在呼叫完c_str()函式後,這個臨時指標會被銷燬,則c所指向的指標是一個被銷燬的垃圾資料。
因此應該建立一個char[]型別,將臨時指標中的內容儲存到固定的指標後。
2.還有兩種宣告轉換方法:
string str = "hello"; const char* p = str.data();
string str=“world”; const char *p = str.c_str();
這裡由於用到的是const宣告方法,所以並不適用於我需要的靈活的應用場景,所以最後還是採用了strcpy()的形式儲存str中的內容到char[]中。