可能重复:
字符串 c_str() 与 data()
我使用strncpy(dest, src_string, 32)
转换std::string
为char[32]
使我的 C++ 类与遗留 C 代码一起工作。但是 std::string 的c_str()
方法是否总是返回一个以 null 结尾的字符串?
可能重复:
字符串 c_str() 与 data()
我使用strncpy(dest, src_string, 32)
转换std::string
为char[32]
使我的 C++ 类与遗留 C 代码一起工作。但是 std::string 的c_str()
方法是否总是返回一个以 null 结尾的字符串?
std::string 的 c_str() 方法是否总是返回一个以 null 结尾的字符串?
是的。
它的规格是:
返回: 一个指针
p
,使得p + i == &operator[](i)
对于每个i
in[0,size()]
。
请注意,为 指定的范围i
是封闭的,因此这size()
是一个有效的索引,指的是字符串末尾之后的字符。
operator[]
是这样指定的:
返回:
*(begin() + pos)
ifpos < size()
,否则是对T
具有值类型的对象的引用charT()
在 的情况下std::string
,它是std::basic_string<char>
so thatcharT
的别名char
,值构造char
的值为零;因此结果指向的字符数组std::string::c_str()
是以零结尾的。
c_str 返回一个“C 字符串”。C 字符串总是以空字符结尾。这是C标准。
据此,答案是肯定的。