()内c_str C ++

c_str()関数は、文字列C正規CONSTのchar *へのポインタへのポインタを返し、コンテンツは文字列そのものであります

C言語との互換性のためのC ++関数は、何C文字列型は、それが文字列パターンC、c_strストリングクラスのオブジェクトのメンバー関数により文字列にオブジェクトを変換する必要はありません()

#include <iostreamの> 
する#include <CStringの>
 使用して 名前空間STD;
 int型のmain(){
     CONST  チャー * C;
     文字列 S = " 1234 " ;
     C = s.c_str(); //上の直接のポインタ 
    COUT << C << てendl;
    S = " ABCD " 
    coutの << C << てendl;
    リターン 0 ;
}

結果:1234 ABCD

Cによって操作そのようなポインタは、文字列が変更されてもよいです。

#include <iostreamの> 
する#include <CStringの>
 使用して 名前空間STD;
 int型のmain(){
     チャー * = C 新しい新しい チャー [ 20である];
     文字列 S = " 1234 " ;
     strcpyの(C、s.c_str()); //によって文字列関数のstrcpy()関数ヘッダは、<string.hの>リターン*チャー内部複製cを#includeし 
    COUT << C << ENDLと、
    S = " ABCD " 
    coutの << C << てendl;
    リターン 0 ;
}

結果:12341234

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'
     //和上一步组合,弥补结果

おすすめ

転載: www.cnblogs.com/bxynlbyx/p/11756140.html