| 
string 與 char [ ] 互轉 
   
  c_str()函數返回一個常數字元陣列指標指向正規 C 字元陣列。 
  因為是常數,所以無法對陣列內容修改。
  
  
  const char * 指標說明:
  
  範例一: 
  char a[]="xyz";//a 字串內容可以修改 
  const char b[]="12";//b 字串內容不能修改 
  const char *p;//p 為常數字元陣列指標
  
  a[0]='T';//a 內容可以修改 
  b[0]='T';//這是錯的,b 為 const 不能修改。 
  p=a;//p 可以指向 a 字元陣列,但不能修改 a 字串內容。 
  *p='T';//這是錯的,因為 p 為 const char*,所以不能修改指向的記憶體內容。 
  p=b;//p 也可以指向 b 字元陣列,也是不能修改內容。
  
  *p='T';//這是錯的,因為 p 為 const char*,所以不能修改指向的記憶體內容。
  
   
  |  
 
  
	  
  c 的 char[] 或 char * 的字串運算並不好用,因此 c++ 才會有 string 的物件。 
  但 string 與 char 並不能相容,必須透過 c_str() 才能互相交流。 
  下列堤供如何使用 char [] 或 char * 與 string.c_str() 運算。
  
  範例二: 
  	char a[]="xyz";//如此宣告,a 只有 4 個空間 
	string x; 
	a = a + "123";//錯誤,陣列無法如此運算 
	x=a;//string 可以接收 char [] 
	x="1"+x+"23";//string 可以靈活運算字串 
	a=x;//錯誤,陣列字元無法接收 string 
	strcpy(a,x);//只能使用傳統 strcpy 做複製,但 strcpy 無法接受 string 
	strcpy(a,x.c_str());//strcpy 只能接受 const char *,因此必須使用 c_str() 
	上面用法雖然正確,但會有 bug,因為 a[] 只有 4 個空間,去除字串結尾字元 '\0',只剩 3 個字,
    然而 x 為 "1xyz23" 共 6 個字,因此 strcpy 會將 6 個字複製到 3 個空間,勢必不足。
  
    
		結論: 
    char [] 運算可使用 string 協助運算,等最後結果再使用 strcpy 將 string.c_str() 複製到 char [],
    但要注意 char [] 可使用空間。 
    string 若要使用傳統函數,例如: strcpy、atoi、atof...等函數,則應使用 c_str() 函數。
  
    
    char [] 設定給 string ==> string = char [] 
    string 設定給 char [] ==> strcpy(char[] , string.c_str())//char[] 空間需大於 string 長度。 
    
 
  
	 |   
    
  |