1. 程式人生 > >【資料型別】string與char[]的轉換方法

【資料型別】string與char[]的轉換方法

在 【資料結構】棧與佇列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[]中。