获取指针的子字符串

Getting a substring of a pointer

本文关键字:字符串 指针 获取      更新时间:2023-10-16

我有一个函数,它将指向字符串的指针作为参数。我想找到该字符串的子字符串,但我尝试使用 use *str.substr()但它说我正在尝试调用成员函数substr()并且str不属于类 std:string* 我该怎么办?

#include <string>
using namespace std;
int main() {
     string str;
     foo(&str);
}
void foo(string *str){
     string temp = *str.substring(int, int);
}

以上是代码的要点。

你违反了运算符优先级规则,这意味着你的代码被解读为

*(str.substring(int, int));

可以使用指针取消引用运算符->

str->substring(a, b);

或使用括号明确说明您想要的内容

(*str).substring(int, int);

除非参数可以为 null,否则更简单的解决方案是传递引用:

foo(const std::string& str){
     std::string temp = str.substring(a, b);
}
这是

由于运算符优先级。元素选择运算符.比取消引用运算符*具有更高的优先级,因此编译器实际上将其视为

*(str.substr(...))

有几种方法可以解决这个问题。我建议的方法是不要使用指针,而是使用参数的引用。然后,您不必担心取消引用或可能的空指针。如果您不想修改原始字符串,请使用常量引用。

喜欢

void foo(const std::string& str)
{
    // ...
    std::string temp = str.substr(...);
    // ...
}

然后在没有地址运算符的情况下调用它

std::string str = ...;
foo(str);