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