2009-10-07 101 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

相关问题