如何更改传递给 C++ 函数的字符串指针的值?

How can you change the value of a string pointer that is passed to a function in C++?

我需要使用函数更改 std::string 的值。

函数必须为空,参数必须是指向字符串的指针,如图所示。

#include <iostream>

void changeToBanana(std::string *s) {
    std::string strGet = "banana";
    std::string strVal = strGet;
    s = &strVal;
}

    int main() {
    std::cout << "Hello, World!" << std::endl;

    std::string strInit = "apple";
    std::string* strPtr;
    strPtr = &strInit;
        changeToBanana(strPtr);
        std::cout << *strPtr << std::endl;
        return 0;
    }

我希望打印出来的字样是“banana” 其他答案涉及更改参数。

我试过使用 for 循环分配字符串,并逐个元素分配,但这没有用。该值保持不变。

The function must be void, and the parameter must be a pointer to a string as shown.

根据此要求,您不能更改传递给函数的指针的值,因为它是按值传递的。

不要将指针与其指向的内容混淆。参数按值传递(除非您按引用传递它们)。制作了一个副本,您在函数中对 s 所做的任何更改都不适用于 main.

中的指针

但是,您可以更改指针指向的字符串(因为s指向与main中的指针相同的字符串):

void changeToBanana(std::string *s) {
    std::string str = "banana";
    *s = str;
}

但是,这不是惯用的 C++。您应该传递一个引用 void changeToBanana(std::string& s) 或 return 字符串 std::string returnBanana().

void changeToBanana(std::string *s) {
    std::string strGet = "banana";
    std::string strVal = strGet;
    
    // the following line doesn't do anything
    //  useful, explanation below
    s = &strVal;
}

s = &strValstrVal 的地址分配给 s。然后函数结束,对 s 所做的任何修改都是“忘记的”,因为 schangeToBanana.[=20= 的 local 变量]

所以调用 changeToBanana(&foo) 什么都不做。

你要么想要这个:

void changeToBanana(std::string *s) {
    *s = "banana";
}
...
std::string strInit = "apple";
changeToBanana(&strInit);    

或这个(首选,因为你不需要指针):

void changeToBanana(std::string & s) {
    s = "banana";
}
...
std::string strInit = "apple";
changeToBanana(strInit);