13

可能重复:
字符串 c_str() 与 data()

我使用strncpy(dest, src_string, 32)转换std::stringchar[32]使我的 C++ 类与遗留 C 代码一起工作。但是 std::string 的c_str()方法是否总是返回一个以 null 结尾的字符串?

4

3 回答 3

26

std::string 的 c_str() 方法是否总是返回一个以 null 结尾的字符串?

是的。

它的规格是:

返回: 一个指针p,使得p + i == &operator[](i)对于每个iin [0,size()]

请注意,为 指定的范围i是封闭的,因此这size() 一个有效的索引,指的是字符串末尾之后的字符。

operator[]是这样指定的:

返回:*(begin() + pos)if pos < size(),否则是对T具有值类型的对象的引用charT()

在 的情况下std::string,它是std::basic_string<char>so thatcharT的别名char,值构造char的值为零;因此结果指向的字符数组std::string::c_str()是以零结尾的。

于 2012-10-02T20:31:13.797 回答
12

c_str 返回一个“C 字符串”。C 字符串总是以空字符结尾。这是C标准。

空终止字符串。

于 2012-10-02T20:33:05.000 回答
2

据此,答案是肯定的。

于 2012-10-02T20:31:15.747 回答