在C ++中将字符串结尾作为const char *

时间:2013-09-15 20:34:02

标签: c++ string

为了在C ++中获取指向string末尾的char指针,我必须这样做:

std::string str = ...
const char * end_ptr = &*str.cend();

与解除引用一样,然后获取表达式的地址。有更优雅的方式吗?

3 个答案:

答案 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');