为了string
在 C++ 中获得指向 a 结尾的 char 指针,我必须这样做是否正确:
std::string str = ...
const char * end_ptr = &*str.cend();
就像取消引用一样,然后获取表达式的地址。有没有更优雅的方法来做到这一点?
我不认为这是有保证的,我会使用
const char* end_ptr = str.c_str() + str.size();
获取指向终止的指针'\0'
。
您的解决方案不正确。它将导致未定义的行为。您不能取消引用str.cend()
:
将迭代器返回到字符串最后一个字符之后的字符。此字符充当占位符,尝试访问它会导致未定义的行为。
你可以做
const char* end_ptr = &str[str.size() - 1];
正如评论中所指出的,这会有点短。
您可以使用std::c_str
来匹配您想要的确切行为并获取指向\0
:
返回指向以空字符结尾的字符数组的指针,该数组的数据与存储在字符串中的数据等效。
指针使得范围
[c_str(); c_str() + size()]
然后你只需要
const char* end_ptr = str.c_str() + str.size();
// or in c++11 you can use data()
假设您的字符串中至少有一个字符。
由于您正在处理 char 指针和 C 字符串,因此最好的方法可能是为此使用合适的 C 函数strchr:
#include <cstring>
const char *endptr = std::strchr(str.c_str(), '\0');