5

为了string在 C++ 中获得指向 a 结尾的 char 指针,我必须这样做是否正确:

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

就像取消引用一样,然后获取表达式的地址。有没有更优雅的方法来做到这一点?

4

3 回答 3

8

我不认为这是有保证的,我会使用

const char* end_ptr = str.c_str() + str.size();

获取指向终止的指针'\0'

于 2013-09-15T20:36:52.583 回答
4

您的解决方案不正确。它将导致未定义的行为。您不能取消引用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()

假设您的字符串中至少有一个字符。

于 2013-09-15T20:36:19.740 回答
-1

由于您正在处理 char 指针和 C 字符串,因此最好的方法可能是为此使用合适的 C 函数strchr

#include <cstring>
const char *endptr = std::strchr(str.c_str(), '\0');
于 2013-11-03T18:56:16.443 回答