C++中的c_str()


c_str()函數返回一個指向正規C字符串的指針 const char*,內容就是string本身

C++中的這個函數是為了與c語言兼容,c中無string類型,故必須通過string類對象的成員函數c_str()把string對象轉換成c中的字符串樣式

#include<iostream>
#include<cstring>
using namespace std;
int main(){
    const char* c;
    string s="1234";
    c=s.c_str();//直接在指針上操作
    cout<<c<<endl;
    s="abcd";
    cout<<c<<endl;
    return 0;
}

結果:1234  abcd

這樣通過c指針進行操作,會是字符串發生改變。

#include<iostream>
#include<cstring>
using namespace std;
int main(){
    char *c=new char[20];
    string s="1234";
    strcpy(c,s.c_str());//通過strcpy()函數 頭文件#include<string.h>c里面的一個字符串復制的函數 返回char*
    cout<<c<<endl;
    s="abcd";
    cout<<c<<endl;
    return 0;
}

結果:1234   1234

通過strcpy()函數進行復制,之后的操作並不會改變字符串

c_str()返回的是一個臨時指針,不能對其進行操作,不需要手動釋放或刪除。

 

strcpy與strncpy的區別

第一種情況:
1
2
3
4
5
6
7
8
9
     char * p= "how are you ?" ;
    
  char  name[20]= "ABCDEFGHIJKLMNOPQRS" ;
   
     strcpy (name,p);
     //name改變為"how are you ? "====>正確!
   
     strncpy (name,p,  sizeof (name));
     //name改變為"how are you ?" =====>正確!后續的字符將置為NULL
第二種情況:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
     char * p= "how are you ?" ;
   
     char  name[10];
  
     strcpy (name,p);
     //目標串長度小於源串,錯誤!
 
     name[ sizeof (name)-1]= '\0' ;
     //和上一步組合,彌補結果,但是這種做法並不可取,因為上一步出錯處理方式並不確定
  
     strncpy (name,p, sizeof (name));
     //源串長度大於指定拷貝的長度sizeof(name),注意在這種情況下不會自動在目標串后面加'\0'
 
     name[ sizeof (name)-1]= '\0'
     //和上一步組合,彌補結果


免責聲明!

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



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