2009-10-07 44 views

答えて

18

c_str()はNUL終了を保証します。 data()はそうではありません。

+0

私は見落としてしまった、単純なものになると思いました - ありがとう! – fbrereto

+1

実際には、彼らはおそらく同じことを指しているでしょう(あなたがそれに頼るべきではない)。 – Zifre

+6

@Zifre:それらは同じアドレスを指しているかもしれませんが、突然変異操作(str + = "...")の後、実装はヌル終端なしで内部データバッファを残し、 '\ 0' c_str()メソッドが呼び出されます。 –

5

c_str()は、戻り値を "C文字列"として使用できるようにNULバイトが付加されたデータへのポインタを返します。

data()は、変更のないデータへのポインタを返します。

使用しているコードがNULで終了していると想定している場合(C文字列を処理する関数など)、c_str()を使用します。私は、ヘッダーでこれを見るように今MSのSTL 10.0で、どんな違いがあるようには思えない

1

... \マイクロソフトのVisual Studio 10.0 \ VC \は

const _Elem *c_str() const 
    { // return pointer to null-terminated nonmutable array 
    return (_Myptr()); 
    } 

const _Elem *data() const 
    { // return pointer to nonmutable array 
    return (c_str()); 
    } 
をXSTRING \含ま

彼らは同じことを返します。

+0

VC 9.0でもまったく同じようです。 –

+0

これは、現在の標準で許可されている動作であり、次の動作で必要となります。私は、大部分の図書館がこれをやっていると思っています。 –

+0

デニスに感謝します。 –

関連する問題