2009-10-07 104 views

回答

18

c_str()保證NUL終止。 data()不。

+0

我想這會是我忽略的一些簡單的東西 - 謝謝! – fbrereto 2009-10-07 21:47:25

+1

但事實上,他們可能指向相同的東西(不是你應該依賴它)。 – Zifre 2009-10-07 21:48:04

+6

@Zifre:它們可能指向相同的地址,但在進行變異操作(str + =「...」)後,實現可能會使內部數據緩衝區沒有空終止,並且僅在添加'\ 0'時調用c_str()方法。 – 2009-10-07 22:07:52

5

c_str()返回一個指向帶有NUL字節的數據的指針,因此可以使用返回值作爲「C字符串」。

data()返回指向數據的指針而不做任何修改。

如果您使用的代碼假定一個字符串是NUL終止(例如寫入處理C字符串的任何函數),請使用c_str()。

1

現在MS STL 10.0那裏似乎沒有什麼區別,因爲我看到這個標題:

... \微軟的Visual Studio 10.0 \ VC \包括\ xstring

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()); 
    } 

所以他們返回相同的東西。

+0

不再是真的。它在VC 9.0中看起來也完全一樣。 – 2011-07-06 22:31:44

+0

這是當前標準允許的行爲,並且是下一個標準所要求的行爲。我懷疑大多數圖書館現在都在這樣做了一段時間,準備轉換。 – 2011-07-07 05:16:44

+0

謝謝丹尼斯。 – 2011-07-07 09:37:08

相關問題