【发布时间】:2016-12-16 21:01:03
【问题描述】:
我有一个 std::string 类的对象,我需要将它传递给 C 函数,该 C 函数通过迭代它并搜索空终止符号来操作 char* 缓冲区。
所以,我有这样的事情:
// C function
void foo(char* buf);
// C++ code
std::string str("str");
foo(&str[0]);
假设我们使用 C++11,所以我们保证std::string 表示将具有连续存储的字符。
但我想知道是否有任何保证&str[0] 将指向以\0 结尾的缓冲区?是的,有c_str 成员函数,但我说的是operator[]。
有人可以引用标准吗?
【问题讨论】:
-
是的,但
str.data()/str.c_str()更惯用。 -
@Mohit Jain 因为该函数接受
char*,而不是const char* -
@FrozenHeart 我不是 100%,但我认为修改
std::string的缓冲区可能是 UB(请参阅 @Zereges 答案中的 Requires )。 -
@Holt 好吧,我不能修改那个函数